7.1 @Suite анотация

И още няколко често използвани анотации. Дори и да не ги ползвате със сигурност ще видите тестове с тях. Следователно е необходимо да се разбере поне в общи линии Howво е написано там.

Тестовете могат да се комбинират в групи. За това има специална анотация @Suite. Пример:

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

В този случай анотацията @Suite е съчетана с други анотации.

  • SuiteDisplayName– задава името на тестовата група в дневника;
  • SelectPackages- задава списъка с пакети, където да търсите тестови класове;
  • IncludeClassNamePatterns– задава модела на имената на тестовите класове.

Защо такива трудности? Представете си, че всички тестове на проекта се изпълняват, да речем, 50 часа. И изпълнението им след всеки комит е много скъпо. В такъв случай е полезно да създадете някои отделни тестови скриптове и да настроите тестването по много по-гъвкав начин.

7.2 Анотация @Order

Друга често срещана анотация е @TestMethodOrder. Тя ви позволява да укажете реда, в който тестовите методи се извикват в тестовия клас. Може да бъде много полезно, когато знаете, че извикванията на методите влияят едно на друго, но в определен ред всичко трябва да работи Howто трябва. Използва се доста често.

Първо, можете да зададете методите, които да бъдат извиквани по азбучен ред :

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

}

Второ, всеки метод може да има специална анотация с неговия пореден номер.

@TestMethodOrder(OrderAnnotation.class)
public class OrderAnnotationUnitTest {

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

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

Или дори създайте отделен клас, който ще определи реда, в който се извикват тестовете:

@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

И накрая, всеки тест може да получи име. Може да е удобно, ако има много тестове и създавате специални сценарии (подмножества) от тестове. За това има специална анотация @DisplayName.

Пример:

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

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

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

Както в случая със задаване на реда на тестовете, тук можете да създадете специален метод, който ще генерира имена на тестове и методи за тестване. Пример:

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

Вижте колко е лесно :)