Spring Core/자질구래
SpringBoot에서 Junit4.x 사용하기
은서파
2020. 12. 25. 07:42
SpringBoot에서 JUnit 4.x 사용하기
문제 상황
그동안 SpringBoot를 쓸때는 Boot로 시작하고 SpringLegacy를 사용할 때는 legacy만 써서 별로 신경쓰지 않았는데 이번에 새롭게 워크샵을 정리하면서 legacy에서 boot로 migration 하는 부분을 만들다 보니 문제가 발생했다.
spring legacy의 기본 template에는 junit이 4.12로 되어있다. 큰 문제 없겠다 싶어 버전만 4.13.1으로 변경 후 사용했다. 그런데 spring boot에서는 4.x가 제거되고 5.x가 기본으로 추가되었다. 따라서 기존의 테스트 코드는 오류를 발생시킨다.
동거시키기
spring boot의 pom.xml에서 dependency hierachy를 살펴보면 junit-jupiter만 설치되어있는 것을 볼 수 있다.
junit에서는 4.X 버전을 vintage라고 부르고 5.X를 jupiter라고 부른다. 따라서 여기에 4.X의 engine인 vintage를 추가해야 한다. pom.xml에 아래와 같이 의존성을 추가하자.
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</dependency>
이제 jupiter와 함께 vintage가 추가된 것을 볼 수 있다.
코드 변경
의존성이 추가되었다고 모든 문제가 해결된 것은 아니다. legacy에서는 별도의 configuration 파일을 사용하지만 spring boot에서는 그런 설정이 없다. 따라서 legacy에서 사용했던 @ContextConfiguration 대신 @SpringBootTest로 변경해야 한다.
// Spring과 연동하기 위해 SprintRunner를 사용한다.
@RunWith(SpringRunner.class)
// 설정 파일의 위치를 지정한다.
//@ContextConfiguration(locations = "/application.xml")
//@ContextConfiguration(classes = ApplicationConfig.class)
//@ContextConfiguration(locations = "file:src/main/webapp/WEB-INF/spring/root-context.xml")
@SpringBootTest
public abstract class AbstractTest {
}