重复测试
重要性:★★☆☆☆
通过声明@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}
:总重复次数。