7.1 @Suite-anmærkning

Og et par mere hyppigt brugte anmærkninger. Selvom du ikke bruger dem, vil du helt sikkert se test med dem. Derfor er det nødvendigt at forstå i det mindste generelt, hvad der står der.

Prøverne kan kombineres i grupper. Der er en særlig anmærkning til dette @Suite. Eksempel:

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

I dette tilfælde er @Suite-annoteringen parret med andre annoteringer.

  • SuiteDisplayName– angiver navnet på testgruppen i loggen;
  • SelectPackages- angiver listen over pakker, hvor man skal søge efter testklasser;
  • IncludeClassNamePatterns– angiver mønsteret for testklassenavne.

Hvorfor sådanne vanskeligheder? Forestil dig, at alle test af projektet udføres, lad os sige, 50 timer. Og det er meget dyrt at udføre dem efter hver forpligtelse. I et sådant tilfælde er det nyttigt at oprette nogle separate testscripts og opsætte test på en meget mere fleksibel måde.

7.2 @Ordreanmærkning

En anden almindelig annotation er @TestMethodOrder. Det giver dig mulighed for at angive den rækkefølge, som testmetoder kaldes i testklassen. Det kan være meget nyttigt, når man ved, at metodekald påvirker hinanden, men i en bestemt rækkefølge skal alt fungere, som det skal. Brugt ret ofte.

Først kan du indstille metoderne, der skal kaldes i alfabetisk rækkefølge :

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

}

For det andet kan hver metode have en speciel anmærkning med sit ordenstal.

@TestMethodOrder(OrderAnnotation.class)
public class OrderAnnotationUnitTest {

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

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

Eller endda oprette en separat klasse, der specificerer rækkefølgen, som testene kaldes 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 annotation

Endelig kan hver test få et navn. Det kan være praktisk, hvis der er mange tests, og du opretter specielle scenarier (undersæt) af test. Der er en særlig anmærkning til 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 tilfældet med indstilling af rækkefølgen af ​​test, kan du her oprette en speciel metode, der vil generere navne på test 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 nemt det er :)