티스토리 뷰
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
'IT > 삽질로그' 카테고리의 다른 글
[삽질로그] JPA & MySQL 연동 시 Auto Reconnect 설정하기 (1) | 2017.07.31 |
---|---|
[삽질로그] Spring boot에서 실행 가능한(Executable) JAR 만들기 (0) | 2017.07.16 |
[삽질로그] Spring boot에서 다중 파일업로드 처리하기 (0) | 2017.05.14 |
[삽질로그] IntelliJ에서 properties 파일 Encoding 바꾸는 법 (0) | 2017.03.23 |
[삽질로그] Springboot gradle dependency 설정 (0) | 2017.02.23 |