7.1 @Suite-anteckning

Och några fler ofta använda anteckningar. Även om du inte använder dem kommer du definitivt att se tester med dem. Därför är det nödvändigt att åtminstone i allmänna termer förstå vad som står där.

Tester kan kombineras i grupper. Det finns en speciell anteckning för detta @Suite. Exempel:

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

I det här fallet paras @Suite-kommentaren med andra kommentarer.

  • SuiteDisplayName– ställer in namnet på testgruppen i loggen;
  • SelectPackages- ställer in listan över paket där man ska leta efter testklasser;
  • IncludeClassNamePatterns– ställer in mönstret för testklassnamn.

Varför sådana svårigheter? Föreställ dig väl att alla tester av projektet utförs, låt oss säga, 50 timmar. Och att utföra dem efter varje commit är mycket dyrt. I ett sådant fall är det användbart att skapa några separata testskript och ställa in testning på ett mycket mer flexibelt sätt.

7.2 @Beställningsanteckning

En annan vanlig kommentar är @TestMethodOrder. Det låter dig specificera i vilken ordning testmetoder anropas i testklassen. Det kan vara väldigt användbart när man vet att metodanrop påverkar varandra, men i en viss ordning ska allt fungera som det ska. Används ganska ofta.

Först kan du ställa in metoderna som ska anropas i alfabetisk ordning :

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

}

För det andra kan varje metod ha en speciell anteckning med dess ordningsnummer.

@TestMethodOrder(OrderAnnotation.class)
public class OrderAnnotationUnitTest {

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

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

Eller till och med skapa en separat klass som anger i vilken ordning testerna kallas:

@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

Slutligen kan varje test ges ett namn. Det kan vara praktiskt om det finns många tester och du skapar speciella scenarier (underuppsättningar) av tester. Det finns en speciell anteckning för detta @DisplayName.

Exempel:

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

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

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

Som i fallet med att ställa in testordningen kan du här skapa en speciell metod som genererar namnen på tester och testmetoder. Exempel:

@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 hur lätt det är :)