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 :)