重复测试

重要性:★★☆☆☆

通过声明@RepeatedTest注解取代@Test`注解,JUnit可以让一个测试方法重复执行若干次。

@RepeatedTest(10)
void repeatedTest() {
    // ...
}

上面的测试方法repeatedTest()会重复执行10次。

还可以通过RepeatedTest注解的name属性给测试方法定制显示名:

package yang.yu.tdd.repeated;

import java.util.logging.Logger;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.RepeatedTest;
import org.junit.jupiter.api.RepetitionInfo;
import org.junit.jupiter.api.TestInfo;

import static org.assertj.core.api.Assertions.assertThat;

class RepeatedTestsDemo {

    private Logger logger = Logger.getLogger(RepeatedTestsDemo.class.getName());

    @BeforeEach
    void beforeEach(TestInfo testInfo, RepetitionInfo repetitionInfo) {
        int currentRepetition = repetitionInfo.getCurrentRepetition();
        int totalRepetitions = repetitionInfo.getTotalRepetitions();
        String methodName = testInfo.getTestMethod().get().getName();
        logger.info(String.format("About to execute repetition %d of %d for %s", //
                currentRepetition, totalRepetitions, methodName));
    }

    @RepeatedTest(10)
    void repeatedTest() {
        // ...
    }

    @RepeatedTest(5)
    void repeatedTestWithRepetitionInfo(RepetitionInfo repetitionInfo) {
        assertThat(repetitionInfo.getTotalRepetitions()).isEqualTo(5);
    }

    @RepeatedTest(value = 1, name = "{displayName} {currentRepetition}/{totalRepetitions}")
    @DisplayName("Repeat!")
    void customDisplayName(TestInfo testInfo) {
        assertThat(testInfo.getDisplayName()).isEqualTo("Repeat! 1/1");
    }

    @RepeatedTest(value = 1, name = RepeatedTest.LONG_DISPLAY_NAME)
    @DisplayName("Details...")
    void customDisplayNameWithLongPattern(TestInfo testInfo) {
        assertThat(testInfo.getDisplayName()).isEqualTo("Details... :: repetition 1 of 1");
    }

    @RepeatedTest(value = 5, name = "Wiederholung {currentRepetition} von {totalRepetitions}")
    void repeatedTestInGerman() {
    }
}

方法的最终显示名可以是通过@DisplayName注解定义的静态显示名和通过@RepeatedTest注解的name属性定义的动态显示名的组合。

在通过@RepeatedTest注解的name属性定义的动态显示名,可以获取下面的静态内容:

  • {displayName}:方法上的注解 @RepeatedTest 的值。
  • {currentRepetition}:当前是第几次执行。
  • {totalRepetitions}:总重复次数。

results matching ""

    No results matching ""