티스토리 뷰
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 임포트를 사용했다면 그냥 위의 방법을 추천합니다.
'Java' 카테고리의 다른 글
왜 (x.compareTo(y) == 0) == (x.equals(y))를 만족해야 할까? (0) | 2020.11.08 |
---|---|
String은 항상 StringBuilder로 변환될까? (4) | 2020.04.01 |
EnumSet이 new 연산자를 사용하지 않는 이유 (0) | 2019.09.12 |
Set은 왜 get() 메소드가 없을까? (0) | 2019.07.09 |
EnumMap(EnumSet) 쓰면 좋을까? (vs HashMap) (2) | 2019.06.06 |