使用@TestFactory创建测试层次结构

时间:2018-02-28 08:27:54

标签: testing junit junit5

我使用Junit 5注释@TestFactory生成了几个这样的测试:

@TestFactory
public Collection<DynamicTest> myTest() throws IOException {
    return fetchSomeTests().stream()
            .map(test -> {
                return dynamicTest(test.get("testDescription"), () -> doMyTest(test));
    }).collect(Collectors.toList());
}

是否可以在组中组织生成的测试,就像使用不同类@Test时一样?

1 个答案:

答案 0 :(得分:3)

不确定。使用Collection<DynamicNode>作为返回类型,并根据需要创建任意数量的组。

复制自:https://junit.org/junit5/docs/current/user-guide/#writing-tests-dynamic-tests

DynamicContainer个实例由显示名称和动态子节点列表组成,可以创建任意嵌套的动态节点层次结构。

以下是生成嵌套动态容器和测试的示例:

@TestFactory
Stream<DynamicNode> dynamicTestsWithContainers() {
    return Stream.of("A", "B", "C")
        .map(input -> dynamicContainer("Container " + input, Stream.of(
            dynamicTest("not null", () -> assertNotNull(input)),
            dynamicContainer("properties", Stream.of(
                dynamicTest("length > 0", () -> assertTrue(input.length() > 0)),
                dynamicTest("not empty", () -> assertFalse(input.isEmpty()))
            ))
        )));
}

它会生成如下树:

│  ├─ DynamicTestsDemo ✔
│  │  ├─ dynamicTestsWithContainers() ✔
│  │  │  ├─ Container A ✔
│  │  │  │  ├─ not null ✔
│  │  │  │  └─ properties ✔
│  │  │  │     ├─ length > 0 ✔
│  │  │  │     └─ not empty ✔
│  │  │  ├─ Container B ✔
│  │  │  │  ├─ not null ✔
│  │  │  │  └─ properties ✔
│  │  │  │     ├─ length > 0 ✔
│  │  │  │     └─ not empty ✔
│  │  │  └─ Container C ✔
│  │  │     ├─ not null ✔
│  │  │     └─ properties ✔
│  │  │        ├─ length > 0 ✔
│  │  │        └─ not empty ✔