JUnit重复测试– @RepeatedTest
时间:2020-02-23 14:35:25 来源:igfitidea点击:
JUnit Jupiter提供了@RepeatedTest注解,使我们可以重复指定次数的测试。
JUnit重复测试示例
让我们看一个非常简单的JUnit 5重复测试示例。
@RepeatedTest(5) void test() { System.out.println("@RepeatedTest Simple Example"); }
当您运行上述测试方法时,它将被调用5次。
您可以在Eclipse中检查控制台消息或者JUnit视图以确认这一点。
您是否注意到测试的显示名称的格式为" replaceition X of N"。
这是因为RepeatedTest在内部更改了方法的显示名称。
从注释中的以下变量中选择RepeatedTest名称的默认值:
String SHORT_DISPLAY_NAME = "repetition " + {currentRepetition} + " of " + {totalRepetitions};
JUnit @RepeatedTest显示名称
我们可以将@RepeatedTest Display Name值更改为任何静态名称。
它还支持三个动态占位符。
{displayName}:从@DisplayName值中选取。
{currentRepetition}:当前重复计数
{totalRepetitions}:重复总数
这是使用动态占位符的RepeatedTest名称的示例。
@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 @RepetitionInfo
您是否注意到我将TestInfo
注入了我的测试方法。
JUnit Jupiter提供了" @RepetitionInfo"批注,我们可以将其注入到我们的测试方法中。
@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()); }
我们正在使用RepetitionInfo
打印当前重复计数。
如果我们有很多这样的方法,那么我们也可以将其移至@BeforeEach或者@AfterEach方法。
@BeforeEach void setUp(RepetitionInfo repetitionInfo, TestInfo testInfo) { System.out.println("Method = "+testInfo.getTestMethod().get().getName()+", Execution Count = "+repetitionInfo.getCurrentRepetition()); }
如果未使用@RepeatedTest注释所有测试方法,则@BeforeEach方法上方将引发错误。
org.junit.jupiter.api.extension.ParameterResolutionException: No ParameterResolver registered for parameter [org.junit.jupiter.api.RepetitionInfo arg0] in executable [void com.theitroad.repeatedtests.RepeatedTestExample.setUp (org.junit.jupiter.api.RepetitionInfo,org.junit.jupiter.api.TestInfo)]