7.1 Adnotare @Suite

Și câteva adnotări mai frecvent utilizate. Chiar dacă nu le folosești, cu siguranță vei vedea teste cu ele. Prin urmare, este necesar să înțelegem cel puțin în termeni generali ce este scris acolo.

Testele pot fi combinate în grupuri. Există o adnotare specială pentru aceasta @Suite. Exemplu:

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

În acest caz, adnotarea @Suite este asociată cu alte adnotări.

  • SuiteDisplayName– setează numele grupului de testare în jurnal;
  • SelectPackages- stabilește lista de pachete în care să caute clasele de testare;
  • IncludeClassNamePatterns– stabilește tiparul denumirilor claselor de testare.

De ce asemenea dificultăți? Ei bine, imaginați-vă că toate testele proiectului sunt executate, să zicem, 50 de ore. Și să le executați după fiecare commit este foarte costisitor. Într-un astfel de caz, este util să creați câteva scripturi de testare separate și să configurați testarea într-un mod mult mai flexibil.

7.2 @Adnotarea comenzii

O altă adnotare comună este @TestMethodOrder. Vă permite să specificați ordinea în care sunt apelate metodele de testare în clasa de testare. Poate fi foarte util când știi că apelurile de metodă se afectează reciproc, dar într-o anumită ordine, totul ar trebui să funcționeze așa cum trebuie. Folosit destul de des.

Mai întâi, puteți seta metodele care vor fi apelate în ordine alfabetică :

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

}

În al doilea rând, fiecare metodă poate avea o adnotare specială cu numărul său ordinal.

@TestMethodOrder(OrderAnnotation.class)
public class OrderAnnotationUnitTest {

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

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

Sau chiar creați o clasă separată care va specifica ordinea în care sunt numite testele:

@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 Adnotare @DisplayName

În cele din urmă, fiecărui test i se poate da un nume. Poate fi convenabil dacă există o mulțime de teste și creați scenarii (subseturi) speciale de teste. Există o adnotare specială pentru aceasta @DisplayName.

Exemplu:

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

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

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

Ca și în cazul stabilirii ordinii testelor, aici puteți crea o metodă specială care va genera denumirile testelor și metodelor de testare. Exemplu:

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

Vezi ce usor este :)