如何通过Java应用程序以编程方式运行JUnit DynamicTest

时间:2018-09-25 13:20:15

标签: java junit5

我想知道是否可以以编程方式运行JUnit5 DynamicTests吗?

我已阅读文章: https://www.baeldung.com/junit-tests-run-programmatically-from-java 展示了如何运行传统的基于包/文件的测试。

我能够使用以下方法轻松地创建动态测试层次结构:

  • org.junit.jupiter.api.DynamicContainer
  • org.junit.jupiter.api.DynamicNode
  • org.junit.jupiter.api.DynamicTest

我已经研究了启动器,发现机制,测试引擎-但是我没有看到明显的解决方案。

理想情况下,我想避免在传统测试文件中使用@TestFactory批注。

任何帮助都将不胜感激。

1 个答案:

答案 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));