14. JUnit 5 마이그레이션

김성수·2022년 12월 27일
0

⚡ 생각대로 살지 않으면 사는대로 생각한다.
⚡ 나는 어차피 잘 될 놈이다. 이미 잘 되고 있고, 계속해서 잘 되고 있다.


기본적으로 스프링부트로 프로젝트를 만들면, junit Vintage Engine 라이브러리가 빠져있는 상태로 생성된다.
이 엔진이 있어야 JUnit 4로 작성한 테스트를 실행할 수 있다.

junit-vintage-engine을 의존성 추가하면, JUnit 5의 junit-platform으로 JUnit 4 혹은 3으로 작성된 테스트를 실행할 수 있다.
(남궁성의 스프링의 정석에서 maven Repo에서 받아오는대로 받아와서 pom.xml에 주입시켜줬다..)

JUnit 4의 @Test 애너테이션을 사용할 때, Jupiter 아래의 @Test 애너테이션을 사용하는 것이 아니라, JUnit 아래의 테스트를 사용해야 한다.

이처럼 테스트가 실행되는데, JUnit 5가 가지고 있는 엔진 JUnit Platform에서 Vintage구현체가 JUnit 4 스타일의 코드를 수행한다.
(Test Runner를 표시하면서 나오게 되던데, 구글링해도 나는 못 찾겠다.)

JUnit 4 로 작성한 테스트를 JUnit 5로 작성할 수 있다.
다만, 제약사항이 있는데, @Rule이다.
JUnit 4에서 사용하던 @Rule이 기본적으로 지원이 되지 않는다.

@Rule은 기본적으로 지원하지 않지만, junit-jupiter-migrationsupport모듈이 제공하는 @EnableRuleMigrationSupport를 사용하면 다음 타입의 @Rule을 지원한다.

해당 강의(2019년)에선 junit-jupiter-migrationsupport에 대한 의존성 주입을 스프링부트에서 기본적으로 해주지는 않기 때문에, 완벽하게 마이그레이션 되지는 않는다고 한다.

  • @Rule을 사용 할 때 다음과 같은 세 가지 타입의 rule만 지원한다.
    • ExternalResource
    • Verifier
    • ExpectedException

아래의 표를 참고해서, JUnit 4를 JUnit 5로 마이그레이션하는 것을 고려해봐야 한다.

JUnit 4JUnit 5
@Category(Class)@Tag(String)
@RunWith, @Rule, @ClassRule@ExtendWith, @RegisterExtension
@Ignore@Disabled
@Before, @After, @BeforeClass, @AfterClass@BeforeEach, @AfterEach, @BeforeAll, @AfterAll
@TestDescription@DisplayName

JUnit 4에서 사용하는 @RunWith애너테이션은 원래 메타 애너테이션으로 사용하지 못 했다.
그런데 JUnit 5에서 사용하는 @ExtendWith메타 애너테이션으로 사용할 수 있다.
그래서 스프링에서 제공해주는 모든 테스트 애너테이션에는 기본적으로 이미 @ExtendWith가 붙어있다.
@ExtendWith는 여러개를 사용해도 상관없다.


-끝-

profile
쌩수 Git >> https://github.com/SsangSoo?tab=repositories

0개의 댓글