JUnit4에서 새로운 JUnit5 어노테이션으로 교체하세요.

 

JUnit5 문서에 언급돼있듯, JUnit4와 JUnit5를 같이 사용하는 것은 가능합니다.

JUnit은 JUnit Vintage 테스트 엔진을 통해 완만한 마이그레이션 경로를 제공하며, JUnit Platform 인프라를 사용하여 JUnit3 및 JUnit4 기반의 기존 테스트를 실행할 수 있습니다. JUnit Jupiter와 관련된 모든 클래스와 어노테이션 명세가 새로운 “org.junit.jupiter” 기본 패키지에 존재하기 때문입니다. classpath에 JUnit4와 JUnit Jupiter가 동시에 있는 것은 어떠한 충돌도 일으키지 않습니다.

하지만 두 시스템을 관리하는 것은 일시적인 해결책입니다. 이 규칙은 JUnit5로 교체될 수 있는 JUnit4에 대해 표시하여 프로젝트의 마이그레이션을 도와줍니다.

다음은 규칙에 의해 JUnit4 어노테이션과 JUnit5가 일치하는 어노테이션 목록입니다.

JUnit4 JUnit5
org.junit.Test org.junit.jupiter.api.Test
org.junit.Before org.junit.jupiter.api.BeforeEach
org.junit.After org.junit.jupiter.api.AfterEach
org.junit.BeforeClass org.junit.jupiter.api.BeforeAll
org.junit.AfterClass org.junit.jupiter.api.AfterAll
org.junit.Ignore org.junit.jupiter.api.Disabled

다음 어노테이션은 JUnit5와 동등한 작업을 위해서는 몇가지 재작업이 필요할 수 있습니다. 간단한 어노테이션 교체로는 즉시 동작하지 않습니다:

JUnit4 JUnit5
org.junit.experimental.categories.Category org.junit.jupiter.api.Tag
org.junit.Rule org.junit.jupiter.api.extension.ExtendWith
org.junit.ClassRule org.junit.jupiter.api.extension.RegisterExtension
org.junit.runner.RunWith org.junit.jupiter.api.extension.ExtendWith

규칙을 어긴 코드

package org.foo;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.runner.RunWith;

@RunWith(MyJUnit4Runner.class)
public class MyJUnit4Test {

    @BeforeClass
    public static void beforeAll() {
        System.out.println("beforeAll");
    }

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

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

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

    @Test
    public void test1() throws Exception {
        System.out.println("test1");
    }

    public interface SomeTests { /* category marker */ }

    @Test
    @Category(SomeTests.class)
    public void test2() throws Exception {
        System.out.println("test2");
    }

    @Test
    @Ignore("Requires fix of #42")
    public void ignored() throws Exception {
        System.out.println("ignored");
    }
}

규칙을 준수한 해결책

package org.foo;

import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;

@ExtendWith(MyJUnit5Extension.class)
class MyJUnit5Test {

    @BeforeAll
    static void beforeAll() {
        System.out.println("beforeAll");
    }

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

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

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

    @Test
    void test1() {
        System.out.println("test1");
    }

    @Test
    @Tag("SomeTests")
    void test2() {
        System.out.println("test2");
    }

    @Test
    @Disabled("Requires fix of #42")
    void disabled() {
        System.out.println("ignored");
    }
}

참고


If you like SONARKUBE, don’t forget to give me a star. :star2:

원문으로 바로가기

Star This Project