
테스트 결과

JUnit4버전으로 테스트한 결과입니다.
에러 | 정상 작동 |
![]() |
![]() |
테스트 소스에서 어노테이션 설정을 잘못해서 에러가 발생했습니다. 그 이유를 분석해보려고 합니다.
오류가 생긴 이유 첫번째.
공식 문서를 확인한 결과 JUnit버전에 따른 사용 방법의 문제였습니다.
Spring Boot Features
Graceful shutdown is supported with all four embedded web servers (Jetty, Reactor Netty, Tomcat, and Undertow) and with both reactive and Servlet-based web applications. It occurs as part of closing the application context and is performed in the earliest
docs.spring.io

공식 문서에 의하면, JUnit4인 경우에는 @RunWith(SpringRunner.class)를 명시해주어야 했습니다. 반대로 JUnit5에서는 이를 무시해도 상관없다고 나와있습니다.
JUnit5에서 @RunWith(SpringRunner.class) 를 빼고, @SpringbootTest와 @AutoConfigureMockMvc 만을 사용해서 테스트가 통과가 되는 것을 확인했습니다.

@SpringBootTest와 @AutoConfigureMockMvc 를 함께 사용하는 것은 공식 문서에도 나와있습니다.

@SpringBootTest에 옵션을 주지 않는다면, 서버는 실행되지 않습니다. web 환경의 테스트가 불가능하지만, @AutoConfigureMockMvc 어노테이션을 통해서 내장 서버를 실행하지 않는 그대로, Mock 환경을 사용해서 web endpoints의 테스트를 할 수 있다고 나와있습니다.

@SpringBootTest 설명
- springboot에서 제공하는 어노테이션입니다.
- SpringApplication의 테스트를 할 때 사용합니다.
@Springboot Option
1. MOCK(Default)

- @AutoConfigureMockMvc나 @AutoConfigureWebTestClient와 함께 사용할 수 있다고 합니다.
- mock web 환경이 제공되며, springboot 내장 톰켓 서버를 실행하지 않고 테스트를 할 수 있게됩니다.
2. RANDOM_PORT

- WebServerApplicationContext를 다운받아 실제 웹 환경을 제공하는 옵션입니다.
- 내장 톰켓 서버가 8080이 아닌 랜덤포트로 시작됩니다.
3. DEFINED_PORT

- WebServerApplicationContext를 다운받아 실제 웹 환경을 제공하는 옵션입니다.
- application.properties에서 개발자가 포트를 지정해서 내장 톰켓 서버를 실행합니다.
4. 아무것도 옵션을 주지 않는 경우(NONE)

- 웹과 관련된 테스트를 할 수 없다.
오류가 생긴 이유 두번째.
@WebMvcTest 를 사용하면 에러가 발생했습니다. 대신에 @AutoConfigureMockMvc 를 사용하면 에러가 발생하지 않았습니다.
@WebMvcTest 의 경우 @Component를 스캔해서 테스트하지 않습니다. 테스트 대상의 컨트롤러가 @Component로 등록한 클래스를 빈으로 주입받아서 사용하고 있는 경우, 테스트 시 에러가 발생하는 것이었습니다.
'SpringBoot > 테스트코드' 카테고리의 다른 글
단위테스트에서 FK관계에서 발생한 DataIntegrityViolationException 에러 (0) | 2020.08.20 |
---|---|
[Springboot 단위테스트]MockMvc Bean을 주입받지 못하는 에러 (0) | 2020.07.26 |
JUnit4와 JUnit5의 차이점. (0) | 2020.07.19 |
[SecurityTest]로그인 인증 테스트 방법 (0) | 2020.07.19 |
[JUnit]MVC 테스트 어노테이션 알아보기 (0) | 2020.07.05 |
댓글