/* * Copyright 2015-2023 the original author or authors. * * All rights reserved. This program and the accompanying materials are * made available under the terms of the Eclipse Public License v2.0 which * accompanies this distribution and is available at * * https://www.eclipse.org/legal/epl-v20.html */ package example; // tag::imports[] import static org.junit.platform.engine.discovery.ClassNameFilter.includeClassNamePatterns; import static org.junit.platform.engine.discovery.DiscoverySelectors.selectClass; import static org.junit.platform.engine.discovery.DiscoverySelectors.selectPackage; import java.io.PrintWriter; import java.nio.file.Path; import java.nio.file.Paths; import org.junit.platform.engine.FilterResult; import org.junit.platform.engine.TestDescriptor; import org.junit.platform.launcher.Launcher; import org.junit.platform.launcher.LauncherDiscoveryListener; import org.junit.platform.launcher.LauncherDiscoveryRequest; import org.junit.platform.launcher.LauncherSession; import org.junit.platform.launcher.LauncherSessionListener; import org.junit.platform.launcher.PostDiscoveryFilter; import org.junit.platform.launcher.TestExecutionListener; import org.junit.platform.launcher.TestPlan; import org.junit.platform.launcher.core.LauncherConfig; import org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder; import org.junit.platform.launcher.core.LauncherFactory; import org.junit.platform.launcher.listeners.SummaryGeneratingListener; import org.junit.platform.launcher.listeners.TestExecutionSummary; import org.junit.platform.reporting.legacy.xml.LegacyXmlReportGeneratingListener; // end::imports[] /** * @since 5.0 */ class UsingTheLauncherDemo { @org.junit.jupiter.api.Test @SuppressWarnings("unused") void discovery() { // @formatter:off // tag::discovery[] LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request() .selectors( selectPackage("com.example.mytests"), selectClass(MyTestClass.class) ) .filters( includeClassNamePatterns(".*Tests") ) .build(); try (LauncherSession session = LauncherFactory.openSession()) { TestPlan testPlan = session.getLauncher().discover(request); // ... discover additional test plans or execute tests } // end::discovery[] // @formatter:on } @org.junit.jupiter.api.Tag("exclude") @org.junit.jupiter.api.Test @SuppressWarnings("unused") void execution() { // @formatter:off // tag::execution[] LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request() .selectors( selectPackage("com.example.mytests"), selectClass(MyTestClass.class) ) .filters( includeClassNamePatterns(".*Tests") ) .build(); SummaryGeneratingListener listener = new SummaryGeneratingListener(); try (LauncherSession session = LauncherFactory.openSession()) { Launcher launcher = session.getLauncher(); // Register a listener of your choice launcher.registerTestExecutionListeners(listener); // Discover tests and build a test plan TestPlan testPlan = launcher.discover(request); // Execute test plan launcher.execute(testPlan); // Alternatively, execute the request directly launcher.execute(request); } TestExecutionSummary summary = listener.getSummary(); // Do something with the summary... // end::execution[] // @formatter:on } @org.junit.jupiter.api.Test void launcherConfig() { Path reportsDir = Paths.get("target", "xml-reports"); PrintWriter out = new PrintWriter(System.out); // @formatter:off // tag::launcherConfig[] LauncherConfig launcherConfig = LauncherConfig.builder() .enableTestEngineAutoRegistration(false) .enableLauncherSessionListenerAutoRegistration(false) .enableLauncherDiscoveryListenerAutoRegistration(false) .enablePostDiscoveryFilterAutoRegistration(false) .enableTestExecutionListenerAutoRegistration(false) .addTestEngines(new CustomTestEngine()) .addLauncherSessionListeners(new CustomLauncherSessionListener()) .addLauncherDiscoveryListeners(new CustomLauncherDiscoveryListener()) .addPostDiscoveryFilters(new CustomPostDiscoveryFilter()) .addTestExecutionListeners(new LegacyXmlReportGeneratingListener(reportsDir, out)) .addTestExecutionListeners(new CustomTestExecutionListener()) .build(); LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request() .selectors(selectPackage("com.example.mytests")) .build(); try (LauncherSession session = LauncherFactory.openSession(launcherConfig)) { session.getLauncher().execute(request); } // end::launcherConfig[] // @formatter:on } } class MyTestClass { } class CustomTestExecutionListener implements TestExecutionListener { } class CustomLauncherSessionListener implements LauncherSessionListener { } class CustomLauncherDiscoveryListener implements LauncherDiscoveryListener { } class CustomPostDiscoveryFilter implements PostDiscoveryFilter { @Override public FilterResult apply(TestDescriptor object) { return FilterResult.included("includes everything"); } }