티스토리 뷰

반응형

IntelliJ IDE에서 JUnit4를 JUnit5 테스트로 변환하는 방법을 알아보겠습니다.

이 포스팅은 https://www.youtube.com/watch?v=F8UTTTDtbH0&t=468s 영상을 참고하였습니다.

 

1. JUnit5 의존성 주입하기

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <version>5.6.2</version>
</dependency>

(아직 JUni4 의존성 삭제는 하지 않습니다.)

 

2. 리팩토링 설정 추가하기 (Inspection)

IntelliJ - Preferences - Editor - Inspections

JUnit으로 검색하여 JUnit 4 test can be JUnit 5 항목 체크[v] 후 OK

 

3. JUnit4 테스트를 JUnit5로 변환하기

이제 JUnit4 테스트 클래스는 IntelliJ가 경고를 해줍니다.

( 20.07.03 현재 @Test 애노테이션에 expected 속성이 있으면 경고를 안해주는 문제가 있네요..

ex) @Test(expected = RuntimeException.class))


클래스 이름에 커서를 두고 cmd + enter(alt + enter) 입력 후 Migrate to JUnit5 리팩토링을 실행합니다.

 

하단에 변환되는 항목을 확인하고 Do Refactor를 클릭하면 JUni4 테스트가 JUnit5 테스트로 자동 변환됩니다.

 

변환 전 JUni4 코드

import org.junit.*;

import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assert.assertThat;

public class Junit4To5 {
    @BeforeClass
    public static void beforeClass() {
        System.out.println("beforeClass");
    }

    @Before
    public void before() {
        System.out.println("before");
    }

    @Test
    public void shouldMigrateTestToSimpleTest() {
        Assert.assertEquals("expected", "expected");
    }

    @Test
    @Ignore
    public void ignoreTestToDisableTest() {

    }

    @Test
    public void shouldStillSupportHamcrestMatchers() {
        assertThat(1, equalTo(1));
    }

    @Test
    public void shouldStillSupportAssume() {
        Assume.assumeTrue(javaVersion() > 0);
    }

    @After
    public void after() {
        System.out.println("after");
    }

    @AfterClass
    public static void afterClass() {
        System.out.println("afterClass");
    }

    private int javaVersion() {
        return 8;
    }
}

 

 

변환 후 JUni5 코드

import org.hamcrest.MatcherAssert;
import org.junit.jupiter.api.*;
import org.junit.jupiter.api.Test;

import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assert.assertThat;

public class Junit4To5 {
    @BeforeAll
    public static void beforeClass() {
        System.out.println("beforeClass");
    }

    @BeforeEach
    public void before() {
        System.out.println("before");
    }

    @Test
    public void shouldMigrateTestToSimpleTest() {
        Assertions.assertEquals("expected", "expected");
    }

    @Test
    @Disabled
    public void ignoreTestToDisableTest() {

    }

    @Test
    public void shouldStillSupportHamcrestMatchers() {
        MatcherAssert.assertThat(1, equalTo(1));
    }

    @Test
    public void shouldStillSupportAssume() {
        Assumptions.assumeTrue(javaVersion() > 0);
    }

    @AfterEach
    public void after() {
        System.out.println("after");
    }

    @AfterAll
    public static void afterClass() {
        System.out.println("afterClass");
    }

    private int javaVersion() {
        return 8;
    }
}
  • import org.junit.*; 의존성이 import org.junit.jupiter.api.*; 로 변경됩니다.
  • @BeforeClass 애노테이션이 @BeforeAll 애노테이션으로 변경됩니다.
  • @Before 애노테이션이 @BeforeEach 애노테이션으로 변경됩니다.
  • Assert.assertEquals() 메서드가 Assertions.assertEquals() 메서드로 변경됩니다.
  • @Ignore 애노테이션이 @Disable 애노테이션으로 변경됩니다.
  • assertThat() 메서드가 JUnit 패키지가 아닌 hamcrest.CoreMatchers 패키지 메서드로 변경됩니다.
  • assumeTrue() 메서드가 JUnit 패키지가 아닌 jupiter.api 패키지 메서드로 변경됩니다.
  • @After 애노테이션이 @AfterEach 애노테이션으로 변경됩니다.
  • @AfterClass 애노테이션이 @AfterAll 애노테이션으로 변경됩니다.

 

4. JUnit4 의존성 삭제하기 (Hamcrest 의존성 주입하기)

JUnit4 의존성을 삭제하였는데 Matcher 관련 import 에러가 발생하였다면 hamcrest 의존성을 넣어줍니다.

<dependency>
    <groupId>org.hamcrest</groupId>
    <artifactId>hamcrest</artifactId>
    <version>2.2</version>
</dependency>

hamcrest 의존성을 주입하게 되면 Matcher 관련 import 에러가 사라지게 됩니다.

 

+ 만약 모든 클래스를 한꺼번에 바꾸고 싶다면?

⇧ (shift) 두번 누른 후, Migrate Action 검색

JUnit (4.x -> 5.0 선택하고 Run - Do Refactor

하지만 static import는 일괄로 자동설정이 되지 않으므로, JUnit4 static 임포트를 사용했다면 그냥 위의 방법을 추천합니다.

반응형
댓글