Автор оригинала: Pankaj Kumar.
JUnit Jupiter предоставляет @RepeatedTest аннотацию, которая позволяет нам повторить тест указанное количество раз.
Пример повторных тестов JUnit
Давайте рассмотрим очень простой пример повторных тестов JUnit 5.
@RepeatedTest(5)
void test() {
System.out.println("@RepeatedTest Simple Example");
}
Когда вы запустите вышеуказанный метод тестирования, он будет вызван 5 раз. Вы можете проверить сообщение консоли или представление JUnit в Eclipse, чтобы подтвердить это.
Вы заметили, что отображаемое имя тестов имеет формат повторение X из N . Это связано с тем, что повторный тест внутренне изменяет отображаемое имя метода. Значение по умолчанию для повторяющегося имени теста выбирается из переменной ниже в аннотации:
String SHORT_DISPLAY_NAME = "repetition " + {currentRepetition} + " of " + {totalRepetitions};
Отображаемое имя JUnit @RepeatedTest
Мы можем изменить значение отображаемого имени @RepeatedTest на любое статическое имя. Он также поддерживает три динамических заполнителя.
- {DisplayName}: Выбрано из значения @DisplayName.
- {{текущее повторение}: текущее количество повторений
- {{общее количество повторений}: общее количество повторений
Вот пример повторяющегося имени теста с использованием динамических заполнителей.
@RepeatedTest(value=2, name="{displayName} {currentRepetition}/{totalRepetitions}")
@DisplayName("MyTest")
void test_with_cutom_DisplayName(TestInfo testInfo) {
System.out.println(testInfo.getDisplayName());
}
Он будет печатать следующие сообщения консоли:
MyTest 1/2 MyTest 2/2
На рисунке ниже показано представление JUnit, в котором отображаются имена методов.
JUnit @Repartitioninfo
Вы заметили, что я ввел Информацию о тесте в свой метод тестирования. JUnit Jupiter предоставляет @Repartitioninfo аннотацию, которую мы можем ввести в наш метод тестирования.
@RepeatedTest(3)
void test_with_RepetitionInfo_Injection(RepetitionInfo repetitionInfo) {
System.out.println("@RepeatedTest with RepetitionInfo Injection");
assertEquals(3, repetitionInfo.getTotalRepetitions());
System.out.println("Current Test Count = "+repetitionInfo.getCurrentRepetition());
}
Мы печатаем текущее количество повторений, используя Информацию о повторении . Если у нас много таких методов, то мы также можем переместить его в методы @beforeach или @afterEach.
@BeforeEach
void setUp(RepetitionInfo repetitionInfo, TestInfo testInfo) {
System.out.println("Method = "+testInfo.getTestMethod().get().getName()+", Execution Count = "+repetitionInfo.getCurrentRepetition());
}
Приведенный выше метод @beforeEach выдаст ошибку, если все методы тестирования не помечены @RepeatedTest.
org.junit.jupiter.api.extension.ParameterResolutionException: No ParameterResolver registered for parameter [org.junit.jupiter.api.RepetitionInfo arg0] in executable [void com.journaldev.repeatedtests.RepeatedTestExample.setUp (org.junit.jupiter.api.RepetitionInfo,org.junit.jupiter.api.TestInfo)]
Резюме
JUnit @RepeatedTest-полезная аннотация, и мы можем использовать ее для многократного тестирования наших методов с одними и теми же данными. Однако в большинстве случаев мы хотим запускать наши тесты несколько раз с разными данными. Для этого вам следует изучить JUnit @ParameterizedTest.