7.1 @Suite アノテーション

さらに、頻繁に使用される注釈がいくつかあります。たとえ使用しなくても、それらを使用したテストが必ず表示されます。したがって、そこに書かれていることを少なくとも一般的に理解する必要があります。

テストはグループにまとめることができます。これには特別な注釈があります@Suite。例:

@Suite
@SuiteDisplayName("JUnit Platform Suite Demo")
@SelectPackages("com.codegym.test")
@IncludeClassNamePatterns(".*Tests")
class SuiteDemo {
}

この場合、@Suite アノテーションは他のアノテーションとペアになります。

  • SuiteDisplayName– ログ内のテスト グループの名前を設定します。
  • SelectPackages- テストクラスを検索するパッケージのリストを設定します。
  • IncludeClassNamePatterns– テストクラス名のパターンを設定します。

なぜそのような困難があるのでしょうか? プロジェクトのすべてのテストが、たとえば 50 時間実行されると想像してください。そして、各コミット後にそれらを実行すると、非常にコストがかかります。このような場合、いくつかの個別のテスト スクリプトを作成し、より柔軟な方法でテストをセットアップすると便利です。

7.2 @Order アノテーション

もう 1 つの一般的な注釈は です@TestMethodOrder。これにより、テスト クラスでテスト メソッドが呼び出される順序を指定できます。これは、メソッド呼び出しが相互に影響を及ぼしながらも、特定の順序ですべてが正常に動作することがわかっている場合に非常に役立ちます。かなり頻繁に使用されます。

まず、メソッドをアルファベット順に呼び出すように設定できます。

@TestMethodOrder(MethodOrderer.MethodName.class)
public class AlphanumericOrderUnitTest {

}

第 2 に、各メソッドには序数を伴う特別なアノテーションを付けることができます。

@TestMethodOrder(OrderAnnotation.class)
public class OrderAnnotationUnitTest {

    @Test
    @Order(1)
    public void firstTest() {
    }

    @Test
    @Order(2)
    public void secondTest() {
    }
}

または、テストが呼び出される順序を指定する別のクラスを作成することもできます。

@TestMethodOrder(CustomOrder.class)
public class CustomOrderUnitTest {

}

//sort method names alphabetically, but ignoring case
public class CustomOrder implements MethodOrderer {
    public void orderMethods(MethodOrdererContext context) {
        context.getMethodDescriptors().sort(
        (MethodDescriptor m1, MethodDescriptor m2)->
           m1.getMethod().getName().compareToIgnoreCase(m2.getMethod().getName()));
    }
}

7.3 @DisplayName アノテーション

最後に、各テストに名前を付けることができます。テストが多数あり、テストの特別なシナリオ (サブセット) を作成する場合に便利です。これには特別な注釈があります@DisplayName

例:

@DisplayName("Friendly name for the test")
public class DisplayNameCustomTest {

    @Test
    @DisplayName("Input Validation")
    void inputData() {
    }

    @DisplayName("Checking critical situations")
    @Test
    void criticalCases() {
    }
}

テストの順序を設定する場合と同様に、ここでもテストの名前とテスト メソッドを生成する特別なメソッドを作成できます。例:

@DisplayNameGeneration(DisplayNameGeneratorUnitTest.ReplaceCamelCase.class)
class DisplayNameGeneratorUnitTest {

    @Test
    void camelCaseName() {
    }

    static class ReplaceCamelCase extends DisplayNameGenerator.Standard {
        @Override
        public String generateDisplayNameForClass(Class testClass) {
            return super.generateDisplayNameForClass(testClass).toUpperCase();
        }
 }
}

それがどれほど簡単かを見てください:)