繁体   English   中英

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

[英]How to programmatically run JUnit DynamicTest, from a Java Application

我想知道是否可以以编程方式运行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批注。

任何帮助,不胜感激。

您的主类路径中需要一个引擎,我建议使用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));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM