JUnit 5 --如何使测试的执行依赖于另一个测试的通过?

yrwegjxp  于 2022-11-11  发布在  其他
关注(0)|答案(2)|浏览(229)

学生在这里。在JUnit 5中,根据另一个测试是成功还是失败来实现条件测试执行的最佳方式是什么?我假设它将涉及ExecutionCondition,但我不确定如何继续。有没有一种方法可以在不向测试类添加我自己的状态的情况下完成此操作?
需要注意的是,我知道依赖Assert,但是我有多个嵌套的测试,它们表示不同的子状态,所以我希望有一种方法在测试级别上实现这一点。
示例:

@Test
void testFooBarPrecondition() { ... }

// only execute if testFooBarPrecondition succeeds
@Nested
class FooCase { ... }

// only execute if testFooBarPrecondition succeeds    
@Nested
class BarCase { ... }
q9rjltbz

q9rjltbz1#

您可以通过在@BeforeEach/@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() { }
}

}

vwhgwdsa

vwhgwdsa2#

@嵌套测试为测试编写者提供了更多的功能来表达几组测试之间的关系。这种嵌套测试使用Java的嵌套类,并促进了对测试结构的分层思考。下面是一个详细的示例,既作为源代码,也作为IDE中执行的屏幕截图。
正如JUnit 5文档中所述,@Nested是为了方便在IDE中显示而使用的。我宁愿在依赖Assert中使用假设作为前提条件。

assertAll(
            () -> assertAll(
                    () -> assumeTrue(Boolean.FALSE)
            ),

            () -> assertAll(
                    () -> assertEquals(10, 4 + 6)
            )
    );

相关问题