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

Can i run Junit dynamic tests produced by @TestFactory concurrently?

我正在使用 Junit 的 Discovering Tests 功能,我还有一个 class 引入了一些 @TestFactory 方法,每个方法都会产生大量的动态测试。我的第一个想法是"It would be great to be able to run these concurrently.",所以我添加了

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

到我的 LauncherDiscoveryRequestBuilder,我用 @Execution(ExecutionMode.CONCURRENT) 注释了我的测试 class 持有工厂。到目前为止一切顺利,但我最终每个 @TestFactory 方法都在不同的线程上 运行 但是单个 @TestFactory 产生的所有动态测试共享同一个线程(线程 @TestFactory 产生了这些测试 运行s on).

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

@TestFactory
@Execution(ExecutionMode.CONCURRENT)

但结果是一样的

是的,您可以并发执行动态测试。

这是来自 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