JUnit 5テスト実行順序 - メソッド名、@Order、ランダム
テスト実行順序、メソッド名順、@Order、ランダム実行
テスト実行順序
デフォルトでは、JUnit 5のテストメソッド実行順序は意図的に明確でないアルゴリズムで決定される。完全なランダムではないが、推測して依存すべきではない。本来の単体テストは実行順序に依存しないことが望ましい。
ただし、結合テストや機能テストでは実行順序が重要になる場合がある。そのような場合のために、JUnitにはテスト実行順序を制御する仕組みが用意されている。
デフォルト順序
順序指定なしでテストを実行すると、メソッド宣言順とは異なる順序で実行されることがある。
メソッド名順
テストクラスに@TestMethodOrder(MethodOrderer.MethodName.class)を指定すると、メソッド名順で実行できる。MethodOrdererは実行順序を制御し、MethodNameはメソッド名をjava.util.Comparatorで比較して並べ替える。
@Orderによる順序
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)を使うと、@Orderアノテーションで順序を明示できる。@Orderが指定されていないメソッドには、デフォルトでInteger.MAX_VALUEが割り当てられる。
ランダム順序
@TestMethodOrder(MethodOrderer.Random.class)を使用すると、メソッドの実行順序がランダムになる。テスト間の隠れた依存関係を見つけるのに役立つ。