본문 바로가기
SpringBoot/테스트코드

[JUnit4-5]JUnit 버전에 따른 어노테이션 사용법

by devebucks 2020. 7. 11.
728x90

테스트 결과

JUnit4버전으로 테스트한 결과입니다.

에러 정상 작동

테스트 소스에서 어노테이션 설정을 잘못해서 에러가 발생했습니다. 그 이유를 분석해보려고 합니다.

 

오류가 생긴 이유 첫번째.

공식 문서를 확인한 결과 JUnit버전에 따른 사용 방법의 문제였습니다.

https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-testing

 

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 만을 사용해서 테스트가 통과가 되는 것을 확인했습니다.

JUnit5로 테스트

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

feat.공식 문서

 

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

 

feat.공식 문서 예시 코드

 

@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로 등록한 클래스를 빈으로 주입받아서 사용하고 있는 경우, 테스트 시 에러가 발생하는 것이었습니다.

 

 

728x90

댓글