JavaRush /Курси /Модуль 3. Java Professional /Популярні анотації у JUnit

Популярні анотації у JUnit

Модуль 3. Java Professional
Рівень 3 , Лекція 6
Відкрита

1. Анотація @Suite

Ось іще кілька анотацій, які часто використовуються. Навіть якщо ти не застосовуєш їх в роботі, ти точно побачиш тести з ними. Тому бажано мати хоча б загальне розуміння про те, що там написано.

Тести можна поєднувати в групи. Для цього є спеціальна анотація @Suite. Приклад:


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

У цьому випадку анотація @Suite працює в парі з іншими анотаціями.

  • SuiteDisplayName – вказує ім'я групи тестів у лозі;
  • SelectPackages – вказує список пакетів, де шукати класи-тести;
  • IncludeClassNamePatterns – вказує шаблон імен класів-тестів.

Навіщо такі складнощі? Уяви, що всі тести проєкту виконуються, скажімо, 50 годин. І виконувати їх після кожного коміту дуже невигідно. У такому разі корисно створити деякі окремі сценарії тестування та налаштувати його набагато більш гнучко.

2. Анотація @Order

Ще одна анотація, що часто зустрічається – @TestMethodOrder. Вона дозволяє встановити порядок виклику тестових методів у тестовому класі. Стає в пригоді, коли ти знаєш, що виклики методів впливають один на одного, але за певного порядку все має працювати як треба. Використовується досить часто.

По-перше, можна встановити виклик методів в алфавітному порядку:


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

}

//сортуємо імена методів за алфавітом, але ігноруємо регістр
public class CustomOrder implements MethodOrderer {
    public void orderMethods(MethodOrdererContext context) {
        context.getMethodDescriptors().sort(
        (MethodDescriptor m1, MethodDescriptor m2)->
           m1.getMethod().getName().compareToIgnoreCase(m2.getMethod().getName()));
    }
}

3. Анотація @DisplayName

І нарешті, для кожного тесту можна вказати його ім'я. Це зручно, якщо тестів дуже багато і ти створюєш спеціальні сценарії (підмножини) тестів. Для цього є спеціальна анотація @DisplayName.

Приклад:


@DisplayName("Зрозуміле ім'я для тесту")
public class DisplayNameCustomTest {

 @Test @DisplayName("Перевірки вихідних даних")
    void inputData() {
    }

 @DisplayName("Перевірка критичних ситуацій") @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(); } }
}

Бачиш, як все просто :)

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ