7.1 Adnotacja @Suite
I kilka częściej używanych adnotacji. Nawet jeśli ich nie używasz, na pewno zobaczysz testy z ich udziałem. Dlatego konieczne jest przynajmniej ogólne zrozumienie tego, co tam jest napisane.
Testy można łączyć w grupy. Jest na to specjalna adnotacja @Suite
. Przykład:
@Suite @SuiteDisplayName("JUnit Platform Suite Demo") @SelectPackages("com.codegym.test") @IncludeClassNamePatterns(".*Tests")
class SuiteDemo {
}
W tym przypadku adnotacja @Suite jest powiązana z innymi adnotacjami.
SuiteDisplayName
– ustawia nazwę grupy testowej w logu;SelectPackages
- ustawia listę pakietów, gdzie szukać klas testowych;IncludeClassNamePatterns
– ustawia wzorzec nazw klas testowych.
Skąd takie trudności? Cóż, wyobraź sobie, że wszystkie testy projektu są wykonywane, powiedzmy, 50 godzin. A wykonanie ich po każdym zatwierdzeniu jest bardzo kosztowne. W takim przypadku warto stworzyć osobne skrypty testowe i skonfigurować testowanie w znacznie bardziej elastyczny sposób.
7.2 Adnotacja @Zamów
Inną częstą adnotacją jest @TestMethodOrder
. Pozwala określić kolejność wywoływania metod testowych w klasie testowej. Może to być bardzo przydatne, gdy wiesz, że wywołania metod wpływają na siebie nawzajem, ale w określonej kolejności wszystko powinno działać tak, jak powinno. Używany dość często.
Najpierw możesz ustawić wywoływanie metod w kolejności alfabetycznej :
@TestMethodOrder(MethodOrderer.MethodName.class)
public class AlphanumericOrderUnitTest {
}
Po drugie, każda metoda może mieć specjalną adnotację z jej liczbą porządkową.
@TestMethodOrder(OrderAnnotation.class)
public class OrderAnnotationUnitTest {
@Test @Order(1)
public void firstTest() {
}
@Test @Order(2)
public void secondTest() {
}
}
Lub nawet utwórz oddzielną klasę, która określi kolejność wywoływania testów:
@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 Adnotacja @DisplayName
Na koniec każdemu testowi można nadać nazwę. Może to być wygodne, jeśli jest dużo testów i tworzysz specjalne scenariusze (podzbiory) testów. Jest na to specjalna adnotacja @DisplayName
.
Przykład:
@DisplayName("Friendly name for the test")
public class DisplayNameCustomTest {
@Test @DisplayName("Input Validation")
void inputData() {
}
@DisplayName("Checking critical situations") @Test
void criticalCases() {
}
}
Podobnie jak w przypadku ustawiania kolejności testów, tutaj możesz utworzyć specjalną metodę, która wygeneruje nazwy testów i metod testowych. Przykład:
@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(); } }
}
Zobacz jakie to proste :)
GO TO FULL VERSION