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