7.1 Аннотация @Suite
И еще несколько часто используемых аннотаций. Даже если ты не будешь их использовать, то точно увидишь тесты с ними. Поэтому нужно хотя бы в общих чертах понимать, что там написано.
Тесты можно объединять в группы. Для этого есть специальная аннотация @Suite
. Пример:
@Suite
@SuiteDisplayName("JUnit Platform Suite Demo")
@SelectPackages("com.javarush.test")
@IncludeClassNamePatterns(".*Tests")
class SuiteDemo {
}
В данном случае аннотация @Suite работает в паре с другими аннотациями.
SuiteDisplayName
– задает имя группы тестов в логе;SelectPackages
– задает список пакетов, где искать классы-тесты;IncludeClassNamePatterns
– задает шаблон имен классов-тестов.
Зачем такие сложности? Ну представь, что все тесты проекта выполняются, скажем, 50 часов. И выполнять их после каждого коммита очень накладно. В таком случае полезно создать некоторые отдельные сценарии тестирования и настроить тестирование гораздо гибче.
7.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()));
}
}
7.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();
}
}
}
Видите, как все просто :)
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ