下面列出了org.junit.platform.launcher.core.LauncherFactory#create ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@RepeatedTest(10)
void runTestsInParallel() {
Launcher launcher = LauncherFactory.create();
SummaryGeneratingListener listener = new SummaryGeneratingListener();
launcher.registerTestExecutionListeners(listener);
LauncherDiscoveryRequest request = request()//
.configurationParameter("junit.jupiter.execution.parallel.enabled", "true")//
.configurationParameter("junit.jupiter.execution.parallel.config.dynamic.factor", "10")//
.selectors(selectClass(TestCase.class))//
.build();
launcher.execute(request);
assertEquals(NUM_TESTS, listener.getSummary().getTestsSucceededCount(),
"number of tests executed successfully");
}
public static void main(String[] args) {
//@formatter:off
LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
.selectors(selectClass("com.baeldung.EmployeesUnitTest"))
.configurationParameter("junit.conditions.deactivate", "com.baeldung.extensions.*")
.configurationParameter("junit.jupiter.extensions.autodetection.enabled", "true")
.build();
//@formatter:on
TestPlan plan = LauncherFactory.create()
.discover(request);
Launcher launcher = LauncherFactory.create();
SummaryGeneratingListener summaryGeneratingListener = new SummaryGeneratingListener();
launcher.execute(request, new TestExecutionListener[] { summaryGeneratingListener });
launcher.execute(request);
summaryGeneratingListener.getSummary()
.printTo(new PrintWriter(System.out));
}
@RepeatedTest(10)
void runTestsInParallel() {
Launcher launcher = LauncherFactory.create();
SummaryGeneratingListener listener = new SummaryGeneratingListener();
launcher.registerTestExecutionListeners(listener);
LauncherDiscoveryRequest request = request()//
.configurationParameter("junit.jupiter.execution.parallel.enabled", "true")//
.configurationParameter("junit.jupiter.execution.parallel.config.dynamic.factor", "10")//
.selectors(selectClass(TestCase.class))//
.build();
launcher.execute(request);
assertEquals(NUM_TESTS, listener.getSummary().getTestsSucceededCount(),
"number of tests executed successfully");
}
@SuppressWarnings("unused")
public static void main(String[] args) {
// Discover and filter tests
LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder
.request()
.selectors(selectPackage("io.github.bonigarcia"),
selectClass(DummyTest.class))
.filters(includeClassNamePatterns(".*Test")).build();
Launcher launcher = LauncherFactory.create();
TestPlan plan = launcher.discover(request);
// Executing tests
TestExecutionListener listener = new SummaryGeneratingListener();
launcher.registerTestExecutionListeners(listener);
launcher.execute(request, listener);
}
@SuppressWarnings("unused")
public static void main(String[] args) {
// Discover and filter tests
LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder
.request()
.selectors(selectPackage("io.github.bonigarcia"),
selectClass(DummyTest.class))
.filters(includeClassNamePatterns(".*Test")).build();
Launcher launcher = LauncherFactory.create();
TestPlan plan = launcher.discover(request);
// Executing tests
TestExecutionListener listener = new SummaryGeneratingListener();
launcher.registerTestExecutionListeners(listener);
launcher.execute(request, listener);
}
public void runOne() {
LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder
.request()
.selectors(selectClass(FirstUnitTest.class))
.build();
Launcher launcher = LauncherFactory.create();
TestPlan testPlan = launcher.discover(request);
launcher.registerTestExecutionListeners(listener);
launcher.execute(request);
}
private static TestExecutionSummary runTestMethod(Class<?> testClass, String methodName) {
MethodSelector testMethodSelector = selectMethod(testClass, methodName);
LauncherDiscoveryRequest request = request().selectors(testMethodSelector)
.build();
SummaryGeneratingListener listener = new SummaryGeneratingListener();
Launcher launcher = LauncherFactory.create();
launcher.execute(request, listener);
return listener.getSummary();
}
private void runTestAndAssertCounters(Class<?> testClass) {
Launcher launcher = LauncherFactory.create();
ExceptionTrackingListener listener = new ExceptionTrackingListener();
launcher.registerTestExecutionListeners(listener);
launcher.execute(request().selectors(selectClass(testClass)).build());
TestExecutionSummary summary = listener.getSummary();
String name = testClass.getSimpleName();
int expectedStartedCount = getExpectedStartedCount(testClass);
int expectedSucceededCount = getExpectedSucceededCount(testClass);
int expectedFailedCount = getExpectedFailedCount(testClass);
// @formatter:off
assertAll(
() -> assertEquals(1, summary.getTestsFoundCount(), () -> name + ": tests found"),
() -> assertEquals(0, summary.getTestsSkippedCount(), () -> name + ": tests skipped"),
() -> assertEquals(0, summary.getTestsAbortedCount(), () -> name + ": tests aborted"),
() -> assertEquals(expectedStartedCount, summary.getTestsStartedCount(), () -> name + ": tests started"),
() -> assertEquals(expectedSucceededCount, summary.getTestsSucceededCount(), () -> name + ": tests succeeded"),
() -> assertEquals(expectedFailedCount, summary.getTestsFailedCount(), () -> name + ": tests failed")
);
// @formatter:on
// Ensure it was an AssertionFailedError that failed the test and not
// something else like an error in the @Configuration class, etc.
if (expectedFailedCount > 0) {
assertEquals(1, listener.exceptions.size(), "exceptions expected");
Throwable exception = listener.exceptions.get(0);
if (!(exception instanceof AssertionFailedError)) {
throw new AssertionFailedError(
exception.getClass().getName() + " is not an instance of " + AssertionFailedError.class.getName(),
exception);
}
}
}
private void runTestAndAssertCounters(Class<?> testClass) {
Launcher launcher = LauncherFactory.create();
ExceptionTrackingListener listener = new ExceptionTrackingListener();
launcher.registerTestExecutionListeners(listener);
launcher.execute(request().selectors(selectClass(testClass)).build());
TestExecutionSummary summary = listener.getSummary();
String name = testClass.getSimpleName();
int expectedStartedCount = getExpectedStartedCount(testClass);
int expectedSucceededCount = getExpectedSucceededCount(testClass);
int expectedFailedCount = getExpectedFailedCount(testClass);
// @formatter:off
assertAll(
() -> assertEquals(1, summary.getTestsFoundCount(), () -> name + ": tests found"),
() -> assertEquals(0, summary.getTestsSkippedCount(), () -> name + ": tests skipped"),
() -> assertEquals(0, summary.getTestsAbortedCount(), () -> name + ": tests aborted"),
() -> assertEquals(expectedStartedCount, summary.getTestsStartedCount(), () -> name + ": tests started"),
() -> assertEquals(expectedSucceededCount, summary.getTestsSucceededCount(), () -> name + ": tests succeeded"),
() -> assertEquals(expectedFailedCount, summary.getTestsFailedCount(), () -> name + ": tests failed")
);
// @formatter:on
// Ensure it was an AssertionFailedError that failed the test and not
// something else like an error in the @Configuration class, etc.
if (expectedFailedCount > 0) {
assertEquals(1, listener.exceptions.size(), "exceptions expected");
Throwable exception = listener.exceptions.get(0);
if (!(exception instanceof AssertionFailedError)) {
throw new AssertionFailedError(
exception.getClass().getName() + " is not an instance of " + AssertionFailedError.class.getName(),
exception);
}
}
}
@Step("Run classes {classes}")
private AllureResults runClasses(final Class<?>... classes) {
final AllureResultsWriterStub writerStub = new AllureResultsWriterStub();
final AllureLifecycle lifecycle = new AllureLifecycle(writerStub);
final ClassSelector[] classSelectors = Stream.of(classes)
.map(DiscoverySelectors::selectClass)
.toArray(ClassSelector[]::new);
final LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
.configurationParameter("junit.jupiter.extensions.autodetection.enabled", "true")
.selectors(classSelectors)
.build();
final LauncherConfig config = LauncherConfig.builder()
.enableTestExecutionListenerAutoRegistration(false)
.addTestExecutionListeners(new AllureJunitPlatform(lifecycle))
.build();
final Launcher launcher = LauncherFactory.create(config);
final AllureLifecycle defaultLifecycle = Allure.getLifecycle();
try {
Allure.setLifecycle(lifecycle);
StepsAspects.setLifecycle(lifecycle);
AttachmentsAspects.setLifecycle(lifecycle);
launcher.execute(request);
return writerStub;
} finally {
Allure.setLifecycle(defaultLifecycle);
StepsAspects.setLifecycle(defaultLifecycle);
AttachmentsAspects.setLifecycle(defaultLifecycle);
}
}
@Step("Run classes {classes}")
private AllureResults runClasses(final Class<?>... classes) {
final AllureResultsWriterStub writerStub = new AllureResultsWriterStub();
final AllureLifecycle lifecycle = new AllureLifecycle(writerStub);
final ClassSelector[] classSelectors = Stream.of(classes)
.map(DiscoverySelectors::selectClass)
.toArray(ClassSelector[]::new);
final LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
.selectors(classSelectors)
.build();
final LauncherConfig config = LauncherConfig.builder()
.enableTestExecutionListenerAutoRegistration(false)
.addTestExecutionListeners(new AllureJunitPlatform(lifecycle))
.build();
final Launcher launcher = LauncherFactory.create(config);
final AllureLifecycle defaultLifecycle = Allure.getLifecycle();
try {
Allure.setLifecycle(lifecycle);
StepsAspects.setLifecycle(lifecycle);
AttachmentsAspects.setLifecycle(lifecycle);
launcher.execute(request);
return writerStub;
} finally {
Allure.setLifecycle(defaultLifecycle);
StepsAspects.setLifecycle(defaultLifecycle);
AttachmentsAspects.setLifecycle(defaultLifecycle);
}
}
public static TestPlanExecutionReport runTests(Class<?> clazz) {
Launcher launcher = LauncherFactory.create();
LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
.selectors(selectClass(clazz))
.build();
ExecutionReportListener listener = new ExecutionReportListener().addClassToSkip(clazz);
launcher.execute(request, listener);
return listener.getReport();
}
Task[] execute() {
String testSuiteName = taskDef.fullyQualifiedName();
Configuration configuration = new Configuration(testSuiteName, loggers, options);
Dispatcher dispatcher = new Dispatcher(configuration, eventHandler);
SummaryPrintingTestListener summaryListener = new SummaryPrintingTestListener(configuration);
TestExecutionListener outputCapturingListener = new OutputCapturingTestListener(
configuration, systemStreamPair);
JupiterTestListener testListener = configuration.getTestListener();
try
{
LauncherDiscoveryRequestBuilder builder = LauncherDiscoveryRequestBuilder.request();
builder.selectors(testSelector(testSuiteName));
builder.filters(testFilters(dispatcher));
Launcher launcher = LauncherFactory.create();
launcher.registerTestExecutionListeners(dispatcher);
launcher.registerTestExecutionListeners(outputCapturingListener);
launcher.registerTestExecutionListeners(summaryListener);
launcher.registerTestExecutionListeners(testListener);
configuration.createRunListener(testClassLoader)
.ifPresent(launcher::registerTestExecutionListeners);
launcher.execute(builder.build(), new TestExecutionListener[0]);
return new Task[0];
}
catch (Throwable t) {
dispatcher.executionFailed(testSuiteName, t);
t.printStackTrace();
return new Task[0];
}
}
@Test
@DisplayName("⚙️ Check a test failure")
void checkFailureTest() {
LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
.selectors(selectClass(FailureTest.class))
.build();
Launcher launcher = LauncherFactory.create();
SummaryGeneratingListener listener = new SummaryGeneratingListener();
launcher.registerTestExecutionListeners(listener);
launcher.execute(request);
TestExecutionSummary summary = listener.getSummary();
assertThat(summary.getTestsStartedCount()).isEqualTo(1);
assertThat(summary.getTestsFailedCount()).isEqualTo(1);
assertThat(summary.getFailures().get(0).getException()).isInstanceOf(AssertionError.class);
}
@Test
@DisplayName("⚙️ Check a test failure with an intermediate async result verifier")
void checkFailureTestWithIntermediateAsyncVerifier() {
LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
.selectors(selectClass(FailureWithIntermediateAsyncVerifierTest.class))
.build();
Launcher launcher = LauncherFactory.create();
SummaryGeneratingListener listener = new SummaryGeneratingListener();
launcher.registerTestExecutionListeners(listener);
launcher.execute(request);
TestExecutionSummary summary = listener.getSummary();
assertThat(summary.getTestsStartedCount()).isEqualTo(1);
assertThat(summary.getTestsFailedCount()).isEqualTo(1);
assertThat(summary.getFailures().get(0).getException()).isInstanceOf(AssertionError.class);
}
public String executeTests(List<Class<?>> testClasses) {
LauncherDiscoveryRequest discoveryRequest = LauncherDiscoveryRequestBuilder.request()
.selectors(
testClasses.stream().map(DiscoverySelectors::selectClass).collect(Collectors.toList())
)
.build();
var launcherConfig = LauncherConfig.builder()
.addTestEngines(new JupiterTestEngine())
.build();
Launcher launcher = LauncherFactory.create(launcherConfig);
// Create log listener:
var logLines = new ArrayList<String>();
var logListener = LoggingListener.forBiConsumer((t, m) -> log(logLines, m.get(), t));
// Create a summary listener:
var summaryListener = new SummaryGeneratingListener();
launcher.registerTestExecutionListeners(logListener, summaryListener);
// Execute request
launcher.execute(discoveryRequest);
var report = summaryListener.getSummary();
return createJsonTestReport(report, logLines);
}
public void runAll() {
LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder
.request()
.selectors(selectPackage("com.baeldung.runfromjava"))
.filters(includeClassNamePatterns(".*Test"))
.build();
Launcher launcher = LauncherFactory.create();
TestPlan testPlan = launcher.discover(request);
launcher.registerTestExecutionListeners(listener);
launcher.execute(request);
}
private TestResults launchTests(final Class<?> testClass) {
final Launcher launcher = LauncherFactory.create();
final TestResults results = new TestResults();
launcher.execute(request().selectors(selectClass(testClass)).build(), results);
return results;
}
private static int launchJUnitPlatform(TestConf testConf) {
var moduleName = testConf.moduleName();
var moduleNameAndVersion = testConf.moduleNameAndVersion();
var parallel = testConf.parallel();
var includeTags = testConf.includeTags();
var excludeTags = testConf.excludeTags();
// Create Launcher API entry point
// https://junit.org/junit5/docs/current/user-guide/#launcher-api
var builder = LauncherDiscoveryRequestBuilder.request();
// Select from...
var packages = testConf.packages();
if (packages.isEmpty()) {
builder.selectors(selectModule(moduleName));
} else {
builder.selectors(packages.stream().map(DiscoverySelectors::selectPackage).collect(toUnmodifiableList()));
}
// Apply filters...
if (!includeTags.isEmpty()) {
builder.filters(TagFilter.includeTags(includeTags));
}
if (!excludeTags.isEmpty()) {
builder.filters(TagFilter.excludeTags(excludeTags));
}
// Fine-tune configuration...
builder.configurationParameter("junit.jupiter.execution.parallel.enabled", Boolean.toString(parallel));
var launcher = LauncherFactory.create();
var launcherDiscoveryRequest = builder.build();
var summaryGeneratingListener = new SummaryGeneratingListener();
var xmlReportsWritingListener = new LegacyXmlReportGeneratingListener(testConf.reportPath().resolve(moduleName), new PrintWriter(System.out));
launcher.registerTestExecutionListeners(summaryGeneratingListener);
launcher.registerTestExecutionListeners(xmlReportsWritingListener);
var startTimeMillis = System.currentTimeMillis();
launcher.execute(launcherDiscoveryRequest);
var duration = System.currentTimeMillis() - startTimeMillis;
var summary = summaryGeneratingListener.getSummary();
// DEBUG
//summary.printTo(new PrintWriter(System.out));
var success = summary.getTestsFailedCount() == 0 && summary.getTestsAbortedCount() == 0 &&
summary.getContainersFailedCount() == 0 && summary.getContainersAbortedCount() == 0;
if (success) {
var succeeded = summary.getTestsSucceededCount();
System.out.printf("[tester] Successfully tested %s: %d tests in %d ms%n", moduleNameAndVersion, succeeded, duration);
} else {
var writer = new PrintWriter(System.err);
summary.printTo(writer);
summary.printFailuresTo(writer);
}
return success? 0: 1;
}
private void runJUnit(String arg, LauncherDiscoveryRequest request) {
Stopwatch stopwatch = Stopwatch.createStarted();
System.out.println(String.format("Running %s", arg));
System.out.println();
Launcher launcher = LauncherFactory.create();
SummaryGeneratingListener listener = new SummaryGeneratingListener();
launcher.execute(request, listener);
TestExecutionSummary summary = listener.getSummary();
this.runCnt += summary.getTestsFoundCount();
this.failureCnt += summary.getTestsFailedCount();
this.ignoreCnt += summary.getTestsSkippedCount();
this.ignoreCnt += summary.getTestsSkippedCount();
System.out.println();
if (summary.getTestsFailedCount() > 0) {
System.out.println(
String.format(
"FAIL Tests run: %d, Failures: %d, Ignore: %d, Time elapsed: %s",
summary.getTestsFoundCount(),
summary.getTestsFailedCount(),
summary.getTestsSkippedCount(),
stopwatch.stop()));
System.out.println("Failures:");
for (TestExecutionSummary.Failure failure : summary.getFailures()) {
System.out.println(failure.getTestIdentifier().getDisplayName());
failure.getException().printStackTrace();
System.out.println();
}
} else {
System.out.println(
String.format(
"Tests run: %d, Failures: %d, Ignore: %d, Time elapsed: %s",
summary.getTestsFoundCount(),
summary.getTestsFailedCount(),
summary.getTestsSkippedCount(),
stopwatch.stop()));
System.out.println("Success");
}
System.out.println(Strings.repeat("-", 80));
}