1. 概要

この短いチュートリアルでは、Junit5で使用可能な@BeforeAllおよび@AfterAllアノテーションを使用して非静的メソッドを実装します。

2. 非静的メソッドの@BeforeAllおよび@AfterAll

単体テスト中に、@BeforeAll@AfterAllを非静的セットアップおよびティアダウンメソッドで使用したい場合があります(たとえば、@ Nested [X169X) ]テストクラスまたはインターフェイスのデフォルトメソッドとして。

@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オーバーです。