当外部测试用例因JUnit 5失败时,请勿启动嵌套测试用例

时间:2019-01-09 14:38:51

标签: java junit5

我有以下测试课程:

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扩展名)来实现此行为? 我认为这通常是所希望的行为。

1 个答案:

答案 0 :(得分:1)

不,目前没有办法使用开箱即用的解决方案。

您可能会编写一个自定义扩展,以跟踪封闭的测试类中测试的成功-例如,通过实现TestExecutionExceptionHandler。那将需要存储在ExtensionContext.Store中。然后,该扩展将需要实现ExecutionCondition,以编程方式禁用嵌套的测试类。

不幸的是,跟踪当前先前执行的测试的“成功”并不是很简单,但是随着新的TestWatcher扩展API的引入,这种情况将得到改善,该API目前计划包含在即将发布的JUnit Jupiter 5.4中: https://github.com/junit-team/junit5/issues/542