Рубрики
Без рубрики

Повторные тесты JUnit – @RepeatedTest

Повторные тесты JUnit, аннотация JUnit Jupiter @RepeatedTest, повторная информация JUnit, инъекция TestInfo, отображаемое имя JUnit @RepeatedTest, динамический заполнитель

Автор оригинала: 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 на любое статическое имя. Он также поддерживает три динамических заполнителя.

  1. {DisplayName}: Выбрано из значения @DisplayName.
  2. {{текущее повторение}: текущее количество повторений
  3. {{общее количество повторений}: общее количество повторений

Вот пример повторяющегося имени теста с использованием динамических заполнителей.

@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.