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();
}
}
}
Бачиш, як все просто :)
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ