[英]Interrupt test class at the first test failure
我有一个 JUnit 5 测试,包括按顺序执行的多个步骤。 这些步骤在不同的方法中定义。
我希望测试在夹具/类中的第一次失败时停止执行。
这是可以在 Spock 中通过使用@Stepwise
注释来实现的行为。 我看不出如何在 JUnit 5 中做到这一点。
编辑:添加了示例测试
@TestMethodOrder(Alphanumeric.class)
class MainTest {
@Test void test1() {
assertTrue(true);
System.out.printf("%d test 1 - ok%n", System.currentTimeMillis());
}
@Test void test2() {
assertTrue(false);
System.out.printf("%d test 2 -nok%n", System.currentTimeMillis());
}
@Test void test3() {
assertTrue(true);
System.out.printf("%d test 3 - ok%n", System.currentTimeMillis());
}
@Test void test4() {
assertTrue(true);
System.out.printf("%d test 4 - ok%n", System.currentTimeMillis());
}
}
给出以下结果:
1596054675044 test 1 - ok
1596054675075 test 2
org.opentest4j.AssertionFailedError:
Expected :true
Actual :false
1596054675111 test 3 - ok
1596054675115 test 4 - ok
您可以在每个步骤中使用断言来实现这一点,因为 JUnit 在断言失败时会停止其执行过程。
如果您希望 JUnit 引擎在其中一个失败时立即停止运行其他@Test
方法,那么这是不可能的。
JUnit 引擎获取您的夹具(测试类),并为每个@Test 方法实例化其新的 object,并注意(,),这些@Test
方法的执行对您来说是不可预测的。 因此,即使一个@Test
失败, JUnit
需要测试其他@Test
方法并且它会这样做。
从这个角度考虑:如果 JUnit 在第一次故障后立即停止,那么如何测试您的软件的其他哪些单元发生故障? 假设您有 1000 个 @Test 方法,并且第二个失败了,您是否有兴趣测试其他 998 个单元?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.