티스토리 뷰

반응형

 Spring Boot에서 Mockmvc를 활용하여 단위테스트를 수행하는 도중.. JUnit을 만들고나서 난관에 봉착했다.

(참고: 인텔리J에서 JUnit생성하는 법)


 분명히 의존성 추가도 잘했는데.. @SpringApplicationConfiguration 어노테이션을 인식하지 못하는 것.. 아래 그림을 참고하면 된다.






 한참을 구글을 찾아 헤매다가 해답을 발견한 것이.. Spring Boot 1.4부터 등장한 @SpringBootTest 어노테이션이다. 벌써 결론부터 내버렸지만, 좀 더 자세히 설명을 하자면...



1
2
3
4
5
6
@RunWith(SpringJunit4ClassRunner.class)
@SpringApplicationConfiguration(TestApp.class)
@IntegrationTest
public class JUnit{
  ...
}
cs



 @SpringApplicationConfiguration 어노테이션을 JUnit 클래스 상단에 추가하면, Application Context를 선택하여 테스트할 수 있다. 즉, @Autowired나 @Resource 등의 어노테이션을 통해 의존성 주입도 가능하다. 



 그리고 @IntegrationTest 어노테이션을 추가하면 실제 웹 애플리케이션이 구동되는 환경과 동일하게 HTTP 요청 테스트가 가능하다.



이는 Spring Boot 1.3까지의 방법이다.



Spring Boot 1.4에서는 @SpringBootTest로 더 간단하게 테스트를 수행할 수 있다. 어떻게 사용하는지 아래 예제와 함께 확인해보자.



1
2
3
4
5
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(webEnvironment=SpringBootTest.WebEnvironment.MOCK)
public class JUnitTest{
    ...
}
cs



위와 같이 테스트 클래스를 만들 수 있다. webEnvironment의 속성은 4가지이다.




MOCK: WebApplicationContext를 로드하고 서블릿 컨테이너 환경을 mocking 한다. 내장된 서블릿 컨테이너는 전혀 시작되지 않는다.


RANDOM_PORT: EmbeddedWebApplicationContext를 로드하고 내장된 서블릿 컨테이너가 시작되는데 요청을 받아들이는 port를 랜덤하게 바꾸고 시작한다.


DEFINED_PORT: EmbeddedWebApplicationContext를 로드하는데, 지정한 포트를 가지고 요청을 받아들인다. (default는 8080)


NONE: ApplicationContext를 로드하기는 하지만 서블릿 컨테이너 환경을 제공하지 않는다.





-끝-





출처및참고

http://jsonobject.tistory.com/229

https://dhsim86.github.io/web/2017/03/22/spring_boot_features_07-post.html




«   2022/06   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
글 보관함
Total
809,652
Today
23
Yesterday
129