7.1 @Suite-annotatie

En nog een paar veelgebruikte annotaties. Zelfs als je ze niet gebruikt, zul je er zeker tests mee zien. Daarom is het noodzakelijk om in ieder geval in algemene termen te begrijpen wat daar staat.

Tests kunnen in groepen worden gecombineerd. Hiervoor is een speciale aantekening @Suite. Voorbeeld:

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

In dit geval wordt de @Suite-annotatie gekoppeld aan andere annotaties.

  • SuiteDisplayName– stelt de naam van de testgroep in het logboek in;
  • SelectPackages- stelt de lijst met pakketten in waar naar testklassen moet worden gezocht;
  • IncludeClassNamePatterns- stelt het patroon van testklassenamen in.

Waarom zulke moeilijkheden? Stel je voor dat alle tests van het project, laten we zeggen, 50 uur worden uitgevoerd. En om ze na elke commit uit te voeren is erg duur. In zo'n geval is het handig om enkele aparte testscripts te maken en het testen veel flexibeler in te richten.

7.2 @Order annotatie

Een andere veel voorkomende annotatie is @TestMethodOrder. Hiermee kunt u de volgorde specificeren waarin testmethoden worden aangeroepen in de testklasse. Het kan erg handig zijn als je weet dat methodeaanroepen elkaar beïnvloeden, maar in een bepaalde volgorde zou alles moeten werken zoals het hoort. Vrij vaak gebruikt.

Eerst kunt u de aan te roepen methoden in alfabetische volgorde instellen :

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

}

Ten tweede kan elke methode een speciale annotatie hebben met zijn volgnummer.

@TestMethodOrder(OrderAnnotation.class)
public class OrderAnnotationUnitTest {

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

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

Of maak zelfs een aparte klasse die de volgorde specificeert waarin de tests worden aangeroepen:

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

Tot slot kan elke test een naam krijgen. Het kan handig zijn als er veel tests zijn en u speciale scenario's (subsets) van tests maakt. Hiervoor is een speciale aantekening @DisplayName.

Voorbeeld:

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

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

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

Net als bij het instellen van de volgorde van tests, kunt u hier een speciale methode maken die de namen van tests en testmethoden genereert. Voorbeeld:

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

Zie hoe gemakkelijk het is :)