⚡ 생각대로 살지 않으면 사는대로 생각한다.
⚡ 나는 어차피 잘 될 놈이다. 이미 잘 되고 있고, 계속해서 잘 되고 있다.
기본적으로 스프링부트로 프로젝트를 만들면, 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
에 대한 의존성 주입을 스프링부트에서 기본적으로 해주지는 않기 때문에, 완벽하게 마이그레이션 되지는 않는다고 한다.
아래의 표를 참고해서, JUnit 4를 JUnit 5로 마이그레이션하는 것을 고려해봐야 한다.
JUnit 4 | JUnit 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는 여러개를 사용해도 상관없다.
-끝-