您将如何为 Junit5 构建 @Repeat 注释?
另外,我希望该选项能够将重复测试报告为 IDE 中的一个测试。
并且每个重复应该能够以某种方式记录其编号,因此您可以看到进度。
从 M4 开始,JUnit Jupiter 为重复测试提供了一流的支持:
@RepeatedTest(10)
void repeatedTest() {
// ...
}
有关文档和其他示例,请参阅用户指南。
我发现通常当您想要重试整个测试时,最好识别并重试测试中的不稳定操作。
例如想象一下,在下面的代码中getResponse()
有时会抛出异常。您可以使用Spring Retry(您可以使用或不使用其他 Spring 项目):
@Test
void somethingFlaky() {
String actual = new RetryTemplate().execute(retryContext -> getResponse());
assertEquals("Hello World!", actual);
}
在此示例中,如果getResponse()
连续 3 次抛出异常,则整个测试将失败,并在最后一次尝试中抛出异常。RetryTemplate
可以配置各种不同的重试和回退策略(例如重试 8 次、每次尝试之间休眠 50 毫秒、指数回退等)。
这样,您可以根据需要管理重试资源,并让测试框架做它最擅长的事情:管理测试(而不是易碎的测试目标)。
@RepeatedTest
现在在 JUnit 5 中可用。您需要的所有现在都已实现。
您可以使用 @RepeatedTest 注释。由于没有给出任何代码示例,请参阅下面的代码示例以清晰理解。
@RepeatedTest(3)
void testsum(RepetitionInfo repetitionInfo){
//now you access the information for the repetition
repetitionInfo.getCurrentRepetition(); //Get the current repetition of the corresponding @RepeatedTest method.
repetitionInfo.getTotalRepetitions(); //Get the total number of repetitions of the corresponding @RepeatedTest method.
}
目前无法按照您的要求进行操作,因为没有允许灵活创建测试的扩展点。但是您可以使用产生动态测试的实用方法来做一些事情。