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

Den*_*nis 3 java junit5

我正在使用Junit的发现测试功能,我还有一个类,它介绍了一些@TestFactory方法,每个方法都会产生大量的动态测试。我的第一个想法是“能够同时运行这些会很棒。”,所以我补充说

.configurationParameter(
               "junit.jupiter.execution.parallel.enabled", "true"
           )
Run Code Online (Sandbox Code Playgroud)

LauncherDiscoveryRequestBuilder和我用@Execution(ExecutionMode.CONCURRENT). 到目前为止@TestFactory一切顺利,但我最终将每种方法运行在不同的线程上,但由单个生成的所有动态测试@TestFactory共享同一个线程(@TestFactory生成这些测试的线程运行的线程)。

我的问题是 - 我可以并行运行由 @TestFactory 生成的动态测试吗?也试过这个

@TestFactory
@Execution(ExecutionMode.CONCURRENT)
Run Code Online (Sandbox Code Playgroud)

但结果是一样的。

Sam*_*nen 5

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

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

@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());
            })
    ));
}
Run Code Online (Sandbox Code Playgroud)

当我执行它时,我看到以下输出表明 4 个动态测试在不同线程中并发执行。

ForkJoinPool-1-worker-5
ForkJoinPool-1-worker-11
ForkJoinPool-1-worker-7
ForkJoinPool-1-worker-9
Run Code Online (Sandbox Code Playgroud)