7.1 @Suite-Annotation

Und noch ein paar häufig verwendete Anmerkungen. Auch wenn Sie sie nicht verwenden, werden Sie auf jeden Fall Tests damit sehen. Daher ist es notwendig, zumindest allgemein zu verstehen, was dort geschrieben steht.

Tests können zu Gruppen zusammengefasst werden. Hierzu gibt es eine besondere Anmerkung @Suite. Beispiel:

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

In diesem Fall wird die @Suite-Annotation mit anderen Annotationen gepaart.

  • SuiteDisplayName– legt den Namen der Testgruppe im Protokoll fest;
  • SelectPackages- legt die Liste der Pakete fest, in denen nach Testklassen gesucht werden soll;
  • IncludeClassNamePatterns– legt das Muster der Testklassennamen fest.

Warum solche Schwierigkeiten? Stellen Sie sich vor, dass alle Tests des Projekts beispielsweise 50 Stunden dauern. Und sie nach jedem Commit auszuführen, ist sehr teuer. In einem solchen Fall ist es sinnvoll, einige separate Testskripte zu erstellen und Tests viel flexibler einzurichten.

7.2 @Order-Annotation

Eine weitere häufige Anmerkung ist @TestMethodOrder. Damit können Sie die Reihenfolge angeben, in der Testmethoden in der Testklasse aufgerufen werden. Dies kann sehr nützlich sein, wenn Sie wissen, dass sich Methodenaufrufe gegenseitig beeinflussen, aber in einer bestimmten Reihenfolge alles so funktionieren sollte, wie es sollte. Wird ziemlich oft verwendet.

Zunächst können Sie die aufzurufenden Methoden in alphabetischer Reihenfolge festlegen :

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

}

Zweitens kann jede Methode eine spezielle Annotation mit ihrer Ordnungszahl haben.

@TestMethodOrder(OrderAnnotation.class)
public class OrderAnnotationUnitTest {

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

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

Oder erstellen Sie sogar eine separate Klasse, die die Reihenfolge angibt, in der die Tests aufgerufen werden:

@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-Annotation

Abschließend kann jedem Test ein Name gegeben werden. Dies kann praktisch sein, wenn es viele Tests gibt und Sie spezielle Testszenarien (Teilmengen) erstellen. Hierzu gibt es eine besondere Anmerkung @DisplayName.

Beispiel:

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

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

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

Wie beim Festlegen der Testreihenfolge können Sie hier eine spezielle Methode erstellen, die die Namen von Tests und Testmethoden generiert. Beispiel:

@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();
        }
 }
}

Sehen Sie, wie einfach es ist :)