Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

예제가 있는 JUnit 5 주석

JUnit 5 차세대 JUnit입니다. 목표는 JVM에서 개발자 측 테스트를 위한 최신 기반을 만드는 것입니다. 여기에는 Java 8 이상에 초점을 맞추고 다양한 테스트 스타일을 활성화하는 것이 포함됩니다.

Maven과 Gradle을 모두 사용할 수 있습니다.

Maven을 사용하는 경우 pom.xml에 다음 종속성을 추가해야 합니다. 파일:

<dependencies>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.3.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-params</artifactId>
        <version>5.3.1</version>
        <scope>test</scope>
    </dependency>
</dependencies>

@JUnit 5 주석

Junit 5에서 가장 분명한 변경 사항 중 하나는 테스트 클래스와 메서드가 더 이상 공개될 필요가 없다는 것입니다.

이제 가장 일반적인 JUnit 5 Annotations 목록을 살펴보겠습니다.

@테스트

이 주석은 메소드가 테스트 메소드임을 나타냅니다. 이 주석에는 속성이 없습니다.

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;

class JUnit5Test {
        
    @Test
    void helloJUnit5() {
        assertEquals(10, 5+5);
    }
}

@ParameterizedTest

매개변수화된 테스트를 사용하면 다른 인수로 테스트를 여러 번 실행할 수 있습니다. 일반 @Test처럼 선언됩니다. 메소드를 사용하지만 @ParameterizedTest 대신 주석.

또한 각 호출에 대한 인수를 제공한 다음 테스트 메서드에서 인수를 사용할 소스를 하나 이상 선언해야 합니다.

예를 들어 다음 예제는 @ValueSource를 사용하는 매개변수화된 테스트를 보여줍니다. String 배열을 인수의 소스로 지정하는 주석.

예:

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;

import static org.junit.jupiter.api.Assertions.assertTrue;

class JUnit5Test {

    @ParameterizedTest
    @ValueSource(strings = { "cali", "bali", "dani" })
    void endsWithI(String str) {
        assertTrue(str.endsWith("i"));
    }
}

@RepeatedTest

JUnit 5에는 @RepeatedTest로 메서드에 주석을 추가하여 지정된 횟수만큼 테스트를 반복할 수 있는 기능이 있습니다. 원하는 총 반복 횟수를 지정합니다.

반복되는 테스트의 각 호출은 일반 @Test 실행처럼 작동합니다. 방법.

이는 Selenium으로 UI를 테스트할 때 특히 유용합니다.

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.RepeatedTest;
import org.junit.jupiter.api.RepetitionInfo;
import org.junit.jupiter.api.TestInfo;

import static org.junit.jupiter.api.Assertions.assertEquals;

class JUnit5Test {
    
    @RepeatedTest(value = 5, name = "{displayName} {currentRepetition}/{totalRepetitions}")
    @DisplayName("RepeatingTest")
    void customDisplayName(RepetitionInfo repInfo, TestInfo testInfo) {
        int i = 3;
        System.out.println(testInfo.getDisplayName() + 
            "-->" + repInfo.getCurrentRepetition()
        );
        
        assertEquals(repInfo.getCurrentRepetition(), i);
    }
}

예제가 있는 JUnit 5 주석

테스트 결과에서 알 수 있듯이 i==3일 때 , 테스트는 통과하고 그렇지 않으면 실패합니다.

@디스플레이 이름

테스트 클래스 및 테스트 메서드는 테스트 실행자와 테스트 보고서에 표시될 사용자 지정 표시 이름을 선언할 수 있습니다.

예:

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInfo;

@DisplayName("DisplayName Demo")
class JUnit5Test {
    @Test
    @DisplayName("Custom test name")
    void testWithDisplayName() {
    }

    @Test
    @DisplayName("Print test name")
    void printDisplayName(TestInfo testInfo) {
        System.out.println(testInfo.getDisplayName());
    }
}

@BeforeEach

@BeforeEach 주석은 JUnit 4의 @Before와 유사하게 각 테스트 메소드 전에 주석이 달린 메소드가 실행되어야 함을 나타냅니다. .

예:

import org.junit.jupiter.api.*;

class JUnit5Test {
    @BeforeEach
    void init(TestInfo testInfo) {
        String callingTest = testInfo.getTestMethod().get().getName();
        System.out.println(callingTest);
    }

    @Test
    void firstTest() {
        System.out.println(1);
    }

    @Test
    void secondTest() {
        System.out.println(2);
    }
}

출력:

firstTest
1
secondTest
2

@AfterEach

이 주석은 JUnit 4의 @After와 유사하게 각 테스트 메소드 후에 주석이 달린 메소드가 실행되어야 함을 나타냅니다. . 예를 들어 테스트가 각 테스트 후에 속성을 재설정해야 하는 경우 @AfterEach로 메서드에 주석을 달 수 있습니다. 그 작업을 위해.

import org.junit.jupiter.api.*;

class JUnit5Test {

    @Test
    void firstTest() {
        System.out.println(1);
    }
    @Test
    void secondTest() {
        System.out.println(2);
    }

    @AfterEach
    void after(TestInfo testInfo) {
        String callingTest = testInfo.getTestMethod().get().getName();
        System.out.println(callingTest);
    }
}

출력:

1
firstTest
2
secondTest

@BeforeAll

이 주석은 모든 테스트 전에 메서드를 실행합니다. 이것은 JUnit 4의 @BeforeClass와 유사합니다. . @BeforeAll 주석은 일반적으로 테스트를 위한 다양한 항목을 초기화하는 데 사용됩니다.

예:

import org.junit.jupiter.api.*;

class JUnit5Test {

    @BeforeAll
    static void init() {
        System.out.println("Only run once before all tests");
    }

    @Test
    void firstTest() {
        System.out.println(1);
    }
    @Test
    void secondTest() {
        System.out.println(2);
    }
}

출력:

Only run once before all tests
1
2

@AfterAll

@AfterAll 주석은 모든 테스트가 실행된 후에만 주석이 달린 메서드를 실행하는 데 사용됩니다. 이것은 JUnit 4의 @AfterClass와 유사합니다. . 이 주석을 사용하여 모든 테스트가 끝날 때 모든 프로세스를 해제하거나 종료합니다.

예:

import org.junit.jupiter.api.*;

class JUnit5Test {

    @Test
    void firstTest() {
        System.out.println(1);
    }
    @Test
    void secondTest() {
        System.out.println(2);
    }

    @AfterAll
    static void after() {
        System.out.println("Only run once after all tests");
    }
}

출력:

1
2
Only run once after all tests

@태그

이 주석을 사용하여 클래스 또는 메서드 수준에서 테스트 필터링을 위한 태그를 선언할 수 있습니다.

@Tag 주석은 선택한 테스트로 테스트 팩을 만들 때 유용합니다.

예:

import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;

@Tag("smoke")
class JUnit5Test {

    @Test
    @Tag("login")
    void validLoginTest() {
    }

    @Test
    @Tag("search")
    void searchTest() {
    }
}

@사용 안 함

@Disabled 주석은 클래스 또는 메서드 수준에서 테스트를 비활성화하거나 건너뛰는 데 사용됩니다. 이것은 JUnit 4의 @Ignore와 유사합니다. .

클래스 수준에서 선언되면 모든 @test 메서드는 건너뜁니다. @Disabled를 사용할 때 메서드 수준에서는 주석이 달린 메서드만 비활성화됩니다.

예:

@Disabled 테스트 클래스를 비활성화하는 데 사용됨:

import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;

@Disabled
class DisabledClassDemo {

    @Test
    void testWillBeSkipped() {
    }
}

예:

@Disabled 테스트 방법을 비활성화하는 데 사용되는 주석:

import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;

class DisabledTestsDemo {

    @Disabled
    @Test
    void testWillBeSkipped() {
    }

    @Test
    void testWillBeExecuted() {
    }
}