我可以同时运行@TestFactory产生的Junit动态测试吗?

时间:2019-04-17 14:54:16

标签: java junit5

我正在使用Junit的Discovering Tests功能,并且我还有一个类,引入了一些@TestFactory方法,每种方法都会产生大量的动态测试。我的第一个想法是“能够同时运行这些程序真是太好了。”,所以我补充了

.configurationParameter(
               "junit.jupiter.execution.parallel.enabled", "true"
           )

对我的LauncherDiscoveryRequestBuilder进行注释,然后我用@Execution(ExecutionMode.CONCURRENT)注释了持有工厂的测试班。到目前为止,一切都很好,但是我最终每个@TestFactory方法都在不同的线程上运行,但是单个@TestFactory产生的所有动态测试都共享同一线程(@TestFactory线程进行这些测试的计算机)。

我的问题是-我可以并行运行@TestFactory产生的动态测试吗?也尝试过

@TestFactory
@Execution(ExecutionMode.CONCURRENT)

但结果是相同的。

1 个答案:

答案 0 :(得分:3)

是的,您可以同时执行动态测试。

这是《 JUnit 5用户指南》中dynamicNodeSingleContainer()测试工厂的修改版本

@TestFactory
@Execution(ExecutionMode.CONCURRENT)
DynamicNode dynamicNodeSingleContainer() {
    return dynamicContainer("palindromes",
        Stream.of("racecar", "radar", "mom", "dad")
            .map(text -> dynamicTest(text, () -> {
                assertTrue(isPalindrome(text));
                System.err.println(Thread.currentThread().getName());
            })
    ));
}

执行它时,我看到以下输出,该输出演示了这4个动态测试在不同线程中同时执行。

ForkJoinPool-1-worker-5
ForkJoinPool-1-worker-11
ForkJoinPool-1-worker-7
ForkJoinPool-1-worker-9