테스트 결과
JUnit4버전으로 테스트한 결과입니다.
에러 | 정상 작동 |
테스트 소스에서 어노테이션 설정을 잘못해서 에러가 발생했습니다. 그 이유를 분석해보려고 합니다.
오류가 생긴 이유 첫번째.
공식 문서를 확인한 결과 JUnit버전에 따른 사용 방법의 문제였습니다.
공식 문서에 의하면, 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 |
댓글