고코딩

JUnit4 ->5 Issues, 변화점 본문

Spring 공부

JUnit4 ->5 Issues, 변화점

고코딩 2021. 7. 16. 11:16

JUnit 5로 바뀌면서 나온 이슈들

  1. Cast Issue

.andExpect(jsonPath()) 를 사용하면서 강제로 ResultMatcher 형태로 형 변환을 해야하는 Issue가 발생하였다. 이 문제들은 기존에 사용하던 라이브러리가 바뀌면서 생긴 현상인데 import 구문을 바꿔주면 된다.

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.assertj.core.internal.bytebuddy.matcher.ElementMatchers.is;
import static org.mockito.Mockito.doReturn;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;

import static org.hamcrest.core.Is.is;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

와 같은 형태들로 바꿔줘야 정상적으로 작동하게 된다. 특히 형 변환을 해준다고 해도 실제 Test를 해보면 테스트 결과가 틀리게 나오는 것을 알 수 있었다.

  1. @Test

@Test 의 import를 바꿔 줘야 한다.

org.junit.Test

org.junit.jupiter.api.Test

로 바꿔야한다.

  1. @RunWith

해당 어노테이션의 경우 Junit5가 되면서 @ExtendWith로 변경되었습니다.

org.junit.runner.RunWith

org.junit.jupiter.api.extension.ExtendWith

로 바꿔야 한다.

그리고 기존에 @RunWith 어노테이션을 모두다 @ExtendWith로 바꿔야한다.

  1. SpringRunner

SpringRunner역시 SpringExtension로 변경되었기 때문에 클래스명과 패키지 위치 2개다 변경이 필요합니다.

org.springframework.test.context.junit4.SpringRunner

org.springframework.test.context.junit.jupiter.SpringExtension

로 바꿔야 한다.

그리고 기존에 SpringRunner로 선언한 클래스를 SpringExtesion으로 바꿔야 한다.

  1. @After

마찬가지로 @After가 역시 @AfterEach 로 변경되었기 때문에 어노테이션과 패키지 위치 2개다 변경이 필요합니다.

org.junit.After

org.junit.jupiter.api.AfterEach

로 바꿔야한다.

그리고 기존에 @After어노테이션을 @AfterEach로 바꿔야한다.

  1. @Before

After와 마찬가지로 @Before가 역시 @BeforeEach 로 변경되었기 때문에 어노테이션과 패키지 위치 2개다 변경이 필요합니다.

org.junit.Before

org.junit.jupiter.api.BeforeEach

로 바꿔야 한다

그리고 기존에 @Before어노테이션을 @BeforeEach로 바꿔야한다.

  1. 중요!!

위의 내용대로 바꿔서 테스트를 진행하면 아래와 같은 에러가 발생한다.

No tests found for given includes

이는 build.gradle에 옵션을 추가하지 않아서 발생한다. 아래와 같은 코드를 build.gradle에 추가해주자.

test {
    useJUnitPlatform()
}

참고.

jsonPath cast issue in Junit5 spring boot with MockMVC

2020.12.16스프링부트와 AWS로 혼자 구현하는 웹 서비스 최신 코드로 변경하기