1. 개요

이 짧은 예제에서, 우리는 비 - 정적 메서드 구현하는거야 @BeforeAll을 하고 @AfterAll이 가능 어노테이션을 Junit5 .

2. 비정적 메서드의 @BeforeAll@AfterAll

단위 테스트 중에 @BeforeAll@AfterAll 을 비정적 설정 및 해제 방법(예: @ Nested 테스트 클래스 또는 인터페이스 기본 방법) 에서 사용하고 싶을 수 있습니다 .

@BeforeAll@AfterAll 메서드를 비정적으로 사용하여 테스트 클래스를 생성해 보겠습니다 .

public class BeforeAndAfterAnnotationsUnitTest {

    String input;
    Long result;

    @BeforeAll
    public void setup() {
        input = "77";
    }

    @AfterAll
    public void teardown() {
        input = null;
        result = null;
    }

    @Test
    public void whenConvertStringToLong_thenResultShouldBeLong() {
        result = Long.valueOf(input);
        Assertions.assertEquals(77l, result);
    }​
}

위의 코드를 실행하면 예외가 발생합니다.

org.junit.platform.commons.JUnitException:  ...

이제 이 상황을 피할 수 있는 방법을 살펴보겠습니다.

3. @TestInstance 어노테이션

@TestInstance 어노테이션을 사용하여 테스트의 수명 주기를 구성합니다. 테스트 클래스에서 선언하지 않으면 수명 주기 모드는 기본적 으로 PER_METHOD가 됩니다 . 그래서 던지는에서 우리의 테스트 클래스를 방지하기 위해 JUnitException을, 우리는 그것을 어노테이션을 필요 @TestInstance (TestInstance. Lifecycle.PER_CLASS) .

테스트 클래스를 다시 실행하고 @TestInstance(TestInstance.Lifecycle.PER_CLASS )를 추가해 보겠습니다.

@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class BeforeAndAfterAnnotationsUnitTest {

    String input;
    Long result;

    @BeforeAll
    public void setup() {
        input = "77";
    }

    @AfterAll
    public void teardown() {
        input = null;
        result = null;
    }

    @Test
    public void whenConvertStringToLong_thenResultShouldBeLong() {
        result = Long.valueOf(input);
        Assertions.assertEquals(77l, result);
    }
}

이 경우 테스트가 성공적으로 실행됩니다.

4. 결론

이 짧은 기사 에서 비정적 메서드에서 @BeforeAll@AfterAll 을 사용하는 방법을 배웠습니다 . 먼저 @TestInstance 어노테이션을 포함하지 않으면 어떻게 되는지 보여주기 위해 간단한 비정적 예제로 시작했습니다 . 그런 다음 JUnitException  이 발생하는 것을 방지하기 위해 @TestInstance(TestInstance.Lifecycle.PER_CLASS)테스트에 어노테이션을 달았습니다 .

항상 그렇듯이 이 모든 예제의 구현은 GitHub에서 끝났습니다 .

Junit footer banner