1概要

デフォルトでは、

JUnitは決定論的だが予測不可能な順序



MethodSorters.DEFAULT

)を使ってテストを実行する。

ほとんどの場合、その動作は完全に問題なく受け入れられます。ただし、特定の順序を強制する必要がある場合もあります。

2.

MethodSorters.DEFAULT

を使用する

このデフォルト戦略はテストメソッドをそれらのハッシュコードを使って比較します。ハッシュ衝突の場合は、辞書式順序が使用されます。

@FixMethodOrder(MethodSorters.DEFAULT)
public class DefaultOrderOfExecutionTest {
    private static StringBuilder output = new StringBuilder("");

    @Test
    public void secondTest() {
        output.append("b");
    }

    @Test
    public void thirdTest() {
        output.append("c");
    }

    @Test
    public void firstTest() {
        output.append("a");
    }

    @AfterClass
    public static void assertOutput() {
        assertEquals(output.toString(), "cab");
    }
}

上記のクラスのテストを実行すると、

assertOutput()

を含め、すべてテストに合格することがわかります。


3

MethodSorters.JVM


を使用する

もう1つの順序付け方法は

MethodSorters.JVM

です。** この方法は、実行ごとに異なる可能性がある自然なJVM順序付けを利用します。

@FixMethodOrder(MethodSorters.JVM)
public class JVMOrderOfExecutionTest {

   //same as above

}

このクラスでテストを実行するたびに、異なる結果が得られます。


4

MethodSorters.NAME

ASCENDING__

を使用する

最後に、この戦略は辞書式の順序でテストを実行するために使用できます。

@FixMethodOrder(MethodSorters.NAME__ASCENDING)
public class NameAscendingOrderOfExecutionTest {
   //same as above

    @AfterClass
    public static void assertOutput() {
        assertEquals(output.toString(), "abc");
    }
}

同様に、このクラスでテストを実行すると、

assertOutput()

を含むすべてのテストに合格します。これにより、アノテーションで設定した実行順序が確認されます。


5結論

このクイックチュートリアルでは、JUnitで利用可能な実行順序を設定する方法について説明しました。

そして、いつものように、この記事で使われている例はhttps://github.com/eugenp/tutorials/tree/master/testing-modules/junit-5[over on GitHub]にあります。