JUnit5——如何使测试执行依赖于另一个通过的测试?

JUnit5——如何使测试执行依赖于另一个通过的测试?,junit,junit5,Junit,Junit5,我是学生。在JUnit5中,基于另一个测试是成功还是失败,实现条件测试执行的最佳方法是什么?我想这会涉及,但我不确定如何进行。有没有一种方法可以做到这一点,而不必将自己的状态添加到测试类中 注意,我知道,但我有多个表示不同子状态的子状态,所以我想在测试级别本身找到一种方法来实现这一点 例如: @测试 void TestFoobarPremission(){…} //仅在TestFoobarPremission成功时执行 @嵌套 类FooCase{…} //仅在TestFoobarPremissi

我是学生。在JUnit5中,基于另一个测试是成功还是失败,实现条件测试执行的最佳方法是什么?我想这会涉及,但我不确定如何进行。有没有一种方法可以做到这一点,而不必将自己的状态添加到测试类中

注意,我知道,但我有多个表示不同子状态的子状态,所以我想在测试级别本身找到一种方法来实现这一点

例如:

@测试
void TestFoobarPremission(){…}
//仅在TestFoobarPremission成功时执行
@嵌套
类FooCase{…}
//仅在TestFoobarPremission成功时执行
@嵌套
类BarCase{…}

您可以通过在@beforeach/@BeforeAll设置方法中提取公共前提条件逻辑,然后使用来解决此问题,该方法的开发完全是为了执行条件测试。一些示例代码:

class SomeTest {

@Nested
class NestedOne {
    @BeforeEach
    void setUp() {
        boolean preconditionsMet = false;
        //precondition code goes here

        assumeTrue(preconditionsMet);
    }

    @Test // not executed when precodition is not met
    void aTestMethod() {}
}

@Nested
class NestedTwo {
    @Test // executed
    void anotherTestMethod() { }
}

}

在建议遵守Java命名约定时。类名是大写的。总是。JUnit5中测试执行的顺序定义得好吗?@Henrik JUnit5中还不支持有序测试执行。它们使用反射来查找方法名,而且由于Java7,反射返回的方法的顺序没有定义。我相信他们正在考虑在将来添加一些支持,因为我跟踪了这个项目,这个版本从5.0.0版本中删除了。@Kotse:好的,谢谢。那么,提议的解决方案不是有问题吗?如果我们不能确保在测试之前执行另一个测试,那么我们怎么能依赖它的成功呢?@Henrik因为我们不能依赖另一个测试的成功/失败,建议的解决方案是将代码移动到一个我们可以依赖于在测试之前执行的位置
@beforeach
将保证在NestedOne类中找到测试之前执行此代码。然后,
assumeThit()
将处理条件执行