본문 바로가기

JUnit5

JUnit private method test 지금껏 테스트 케이스를 작성할 때 public 메소드를 통하여 private 메소드를 테스트 하곤 했는데 private 메소드를 테스트 할 일이 생겨 reflection을 이용하여 유틸 클래스를 작성하게 되었다. private 접근 제어자가 필드 및 메소드에 존재할지라도 외부 클래스에서 setAccessible(true)로 지정하면 접근이 가능하다. 한 가지 아쉬운 점은 reflection을 이용하여 메소드 테스트를 하고 싶을 때 메소드 이름을 문자열로 넘겨야 한다는 것이다. 이와 같이 메소드 이름을 하드 코딩으로 넘기게 되면 리펙토링에 취약하다는 단점이 있다. (private method 이름을 바꿔버리면? 테스트 실패) powermock 라이브러리도 private method를 테스트 할 때 메소드 .. 2014. 3. 4.
JUnit 테스트 실행 시 src/test/resource 패키지의 설정 파일만 읽어 들일까? JUnit 테스트 코드를 작성하다 보면 스프링에 의존성이 생기는 경우가 있다.이럴 때 스프링 테스트 컨텍스트 프레임워크를 사용하여 스프링 컨테이너를 초기화 한 후 테스트를 진행하게 된다.다음의 테스트 코드가 스프링 테스트 컨텍스트 프레임워크를 사용한 코드이다.@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"/spring.xml"}) public class SpringBeanLoadingTest { @Resource private String namkyu; @Test public void test() { // src/main/resource/spring.xml // assertThat(namkyu, is("namkyu".. 2014. 2. 25.
이클립스 Java Templates 활용 방법 spring 테스트 시 이클립스의 Templates 기능을 사용하면 훨씬 편리하게 테스트를 할 수 있다. 예를 들어서 스프링의 테스트 컨텍스트를 생성할 때 우리는 항상 @RunWith, @ContextConfiguration 애노테이션을 추가한다.매번 테스트 클래스를 생성할 때마다 복사해서 붙여 넣는 것도 귀찮고, 그렇다고 타이핑하기에는 시간이 아깝다. 그럼 이런 반복적인 작업을 어떻게 하면 개선할 수 있을까?그 방법은 자동화할 수 있는 툴을 적극적으로 이용하는 것이다. 그래서 난 이클립스의 Templates을 이용하여 이런 반복적인 작업을 단순화 시켰다. (예전 스터디 모임에서 어느 분이 알려주신 방법이다.) 가령 class 선언부의 위쪽에 커서를 놓은 후 springtest 라고 입력하고, ctrl .. 2013. 2. 25.
Junit @RunWith @ContextConfiguration에 대해서 @RunWith() 스프링의 테스트 컨텍스트 프레임워크 JUnit 확장 기능 지정 Junit은 각각의 테스트가 서로 영향을 주지 않고 독립적으로 실행됨을 원칙으로 하기에 @Test 마다 오브젝트를 생성한다. 이와 같은 Junit의 특성으로 인하여 ApplicationContext도 매번 새로 생성되기 때문에 테스트가 느려지는 단점이 있다. 그러나 @RunWith 애노테이션은 각각의 테스트 별로 오브젝트가 생성 되더라도 싱글톤의 ApplicationContext를 보장한다. @RunWith() 대신 AbstractJUnit4SpringContextTests를 상속받아 사용할 수 있음. @ContextConfiguration() spring bean 메타 설정 파일의 위치를 지정할 때 사용되는 애노테이션이며.. 2012. 11. 26.
이클립스 junit 특정 메소드만 테스트를 실행하고 싶을 때 junit 테스트 메소드를 여러 개 생성하였을 때 특정 메소드에서만 테스트를 진행하고 싶을 때가 있다. 그럴 때에는 메소드 명에 살포시 커서를 올려 놓은 후 ctrl + F11을 누르도록 하자. 또 다른 방법은 @Ignore 애노테이션을 이용하여 테스트를 제외시킬 수 있다. 2012. 11. 7.