我可以 运行 由@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
我正在使用 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