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)]