我正在使用Junit的Discovering Tests功能,我也有一个类介绍了一些@TestFactory
方法,每个方法都会产生大量的动态测试。我的第一个想法是“能够同时运行它们会很棒。”所以我补充道
.configurationParameter(
"junit.jupiter.execution.parallel.enabled", "true"
)
我的LauncherDiscoveryRequestBuilder
和我注释我的测试班用@Execution(ExecutionMode.CONCURRENT)
控制工厂。到目前为止一切都那么好,但我最终得到了每个@TestFactory
方法在不同的线程上运行,但是由单个@TestFactory
生成的所有动态测试共享相同的线程(生成这些测试的@TestFactory
运行的线程)。
我的问题是 - 我可以并行运行@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