我有以下测试课程:
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class HierarchicalTest {
@Test
void checkOuter() {
assertTrue(false);
}
@Nested
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class PrepBTest {
@Test
void checkInnerA() {}
@Test
void checkInnerB() {}
}
}
我想让checkInnerA()
失败时不会执行checkInnerB()
和checkOuter()
的行为。
另一方面,当checkInnerB()
由于处于同一级别而失败时,应执行checkInnerA()
。
是否有简单的解决方案(例如,使用JUnit 5扩展名)来实现此行为? 我认为这通常是所希望的行为。
答案 0 :(得分:1)
不,目前没有办法使用开箱即用的解决方案。
您可能会编写一个自定义扩展,以跟踪封闭的测试类中测试的成功-例如,通过实现TestExecutionExceptionHandler
。那将需要存储在ExtensionContext.Store
中。然后,该扩展将需要实现ExecutionCondition
,以编程方式禁用嵌套的测试类。
不幸的是,跟踪当前先前执行的测试的“成功”并不是很简单,但是随着新的TestWatcher
扩展API的引入,这种情况将得到改善,该API目前计划包含在即将发布的JUnit Jupiter 5.4中: https://github.com/junit-team/junit5/issues/542