【问题标题】:Running a set of @Order ordered JUnit5 tests multiple times多次运行一组@Order 排序的 JUnit5 测试
【发布时间】:2020-07-07 11:35:09
【问题描述】:
我想知道是否有一种直接的方法可以使用 JUnit5 多次运行一组有序测试,而不是使用 @RepeatedTest 注释多次运行每个测试。
例如,我的测试:
@Test
@Order(1)
public void myFirstTest() {
//code here
}
@Test
@Order(2)
public void myFirstTest() {
//code here
}
@Test
@Order(3)
public void myFirstTest() {
//code here
}
我希望它们按 1-3 顺序运行,但在序列完成后重复。这可以在 JUnit 5 中轻松完成还是@RunWith(Parameterized.class) 仍然是最简单的方法,如here 所述
【问题讨论】:
标签:
junit
junit5
parameterized
【解决方案1】:
@RunWith(Parameterized.class) 在 JUnit 5 中不起作用。
您可以使用自己的启动器。这可能是矫枉过正,但它的工作原理。
需要重复测试的测试类:
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@Disabled
public class OrderedExampleTest {
@Test
@Order(1)
public void shouldRunFirst() {
System.out.println("First!! ");
}
@Test
@Order(2)
public void shouldRunSecond() {
System.out.println("Second!!");
}
@Test
@Order(3)
public void shouldRunThird() {
System.out.println("Third!!");
}
}
然后在一个单独的类中,一个特殊的测试方法将多次重新运行整个类:
public class ExternalRunnerTest {
@Test
public void shouldRepeatTestClass() {
LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
.selectors(
selectPackage("org.igorski.repeated"),
selectClass(OrderedExampleTest.class)
)
.configurationParameter("junit.jupiter.conditions.deactivate", "org.junit.*DisabledCondition")
.build();
Launcher launcher = LauncherFactory.create();
int numberOfRepeats = 5;
for(int i = 0; i < numberOfRepeats; i++) {
launcher.execute(request);
}
}
}
OrderedExampleTest 已禁用。因此,当您一起运行所有测试时,它不应该单独运行。但是,特殊的重复测试将忽略禁用条件并运行测试。
在我的情况下,打印:
First!!
Second!!
Third!!
First!!
Second!!
Third!!
First!!
Second!!
Third!!
First!!
Second!!
Third!!
First!!
Second!!
Third!!