我想知道是否可以以编程方式运行JUnit5 DynamicTests吗?
我已阅读文章: https://www.baeldung.com/junit-tests-run-programmatically-from-java 展示了如何运行传统的基于包/文件的测试。
我能够使用以下方法轻松地创建动态测试层次结构:
我已经研究了启动器,发现机制,测试引擎-但是我没有看到明显的解决方案。
理想情况下,我想避免在传统测试文件中使用@TestFactory批注。
任何帮助都将不胜感激。
答案 0 :(得分:0)
您的主类路径中需要一个引擎,我建议使用junit提供的引擎(与Gradle配合使用):
implementation 'org.junit.jupiter:junit-jupiter-engine:5.4.0'
implementation (
[group: 'org.junit.jupiter', name: 'junit-jupiter-api', version:'5.4.0'],
[group: 'org.junit.platform', name: 'junit-platform-launcher', version:'1.4.0']
)
然后,创建一个TestFactory:
public class MyTestFactory {
@TestFactory
Collection<DynamicTest> dynamicTestCollection() {
return Arrays.asList(DynamicTest.dynamicTest(
"pipeline toto",
() -> Assertions.assertEquals(2, Math.addExact(1, 1)))
);
}
}
并创建启动器:
LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
.selectors(
selectPackage(" org.qwant.datahub.djobi.tester.runners"),
selectClass("MyTestFactory")
)
.build();
Launcher launcher = LauncherFactory.create();
SummaryGeneratingListener listener = new SummaryGeneratingListener();
launcher.registerTestExecutionListeners(listener);
launcher.execute(request);
TestExecutionSummary summary = listener.getSummary();
summary.printTo(new PrintWriter(System.out));