Как программно запустить JUnit DynamicTest из Java-приложения - PullRequest
0 голосов
/ 25 сентября 2018

Я хотел бы знать, можно ли программно запускать 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

Я исследовал Launcher, механизмы обнаружения, тестовые модули - но я не вижу очевидного решения.

В идеале я хочу избегать использования аннотации @TestFactory в традиционном тестовом файле.

Любая помощь очень ценится.

1 Ответ

0 голосов
/ 13 марта 2019

Вам нужен движок в вашем основном пути к классу, я предлагаю использовать тот, который предоставлен 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));
...