我正在使用Junit的Discovering Tests功能,并且我还有一个类,引入了一些@TestFactory
方法,每种方法都会产生大量的动态测试。我的第一个想法是“能够同时运行这些程序真是太好了。”,所以我补充了
.configurationParameter(
"junit.jupiter.execution.parallel.enabled", "true"
)
对我的LauncherDiscoveryRequestBuilder
进行注释,然后我用@Execution(ExecutionMode.CONCURRENT)
注释了持有工厂的测试班。到目前为止,一切都很好,但是我最终每个@TestFactory
方法都在不同的线程上运行,但是单个@TestFactory
产生的所有动态测试都共享同一线程(@TestFactory
线程进行这些测试的计算机)。
我的问题是-我可以并行运行@TestFactory产生的动态测试吗?也尝试过
@TestFactory
@Execution(ExecutionMode.CONCURRENT)
但结果是相同的。
答案 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