7.1 @Suite-kommentar

Og noen flere ofte brukte merknader. Selv om du ikke bruker dem, vil du definitivt se tester med dem. Derfor er det nødvendig å forstå i det minste generelt det som står der.

Tester kan kombineres i grupper. Det er en spesiell merknad for dette @Suite. Eksempel:

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

I dette tilfellet er @Suite-kommentaren sammenkoblet med andre merknader.

  • SuiteDisplayName– setter navnet på testgruppen i loggen;
  • SelectPackages- setter listen over pakker hvor du skal se etter testklasser;
  • IncludeClassNamePatterns– setter mønsteret for testklassenavn.

Hvorfor slike vanskeligheter? Tenk deg at alle testene av prosjektet er utført, la oss si, 50 timer. Og å utføre dem etter hver forpliktelse er veldig dyrt. I et slikt tilfelle er det nyttig å lage noen separate testskript og sette opp testing på en mye mer fleksibel måte.

7.2 @Ordrekommentar

En annen vanlig merknad er @TestMethodOrder. Den lar deg spesifisere rekkefølgen testmetodene kalles i testklassen. Det kan være veldig nyttig når man vet at metodeanrop påvirker hverandre, men i en viss rekkefølge skal alt fungere som det skal. Brukt ganske ofte.

Først kan du angi metodene som skal kalles i alfabetisk rekkefølge :

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

}

For det andre kan hver metode ha en spesiell merknad med sitt ordinære tall.

@TestMethodOrder(OrderAnnotation.class)
public class OrderAnnotationUnitTest {

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

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

Eller til og med opprette en egen klasse som spesifiserer rekkefølgen testene kalles i:

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

Til slutt kan hver test gis et navn. Det kan være praktisk hvis det er mange tester og du lager spesielle scenarier (undersett) av tester. Det er en spesiell merknad for dette @DisplayName.

Eksempel:

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

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

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

Som i tilfellet med å angi rekkefølgen på tester, kan du her lage en spesiell metode som vil generere navn på tester og testmetoder. Eksempel:

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

Se hvor enkelt det er :)