in surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreProvider.java [113:171]
public RunResult invoke(Object forkTestSet) throws TestSetFailedException {
ReporterFactory reporterFactory = providerParameters.getReporterFactory();
JUnit4RunListener listener = createRunListener(reporterFactory);
listener.setRunMode(NORMAL_RUN);
ConsoleLogger logger = listener.getConsoleLogger();
Notifier notifier = new Notifier(listener, getSkipAfterFailureCount());
// startCapture() called in createRunListener() in prior to setTestsToRun()
Filter filter = jUnit48Reflector.isJUnit48Available() ? createJUnit48Filter() : null;
if (testsToRun == null) {
setTestsToRun(forkTestSet);
}
// Add test failure listener
JUnitTestFailureListener testFailureListener = new JUnitTestFailureListener();
notifier.addListener(testFailureListener);
if (isFailFast() && commandsReader != null) {
registerPleaseStopJUnitListener(notifier);
}
final RunResult runResult;
try {
JUnitCoreWrapper core = new JUnitCoreWrapper(notifier, jUnitCoreParameters, logger);
if (commandsReader != null) {
registerShutdownListener(testsToRun);
commandsReader.awaitStarted();
}
notifier.asFailFast(isFailFast());
core.execute(testsToRun, createCustomListeners(customRunListeners), filter);
notifier.asFailFast(false);
// Rerun failing tests if rerunFailingTestsCount is larger than 0
if (isRerunFailingTests()) {
listener.setRunMode(RERUN_TEST_AFTER_FAILURE);
Notifier rerunNotifier = pureNotifier();
notifier.copyListenersTo(rerunNotifier);
JUnitCoreWrapper rerunCore = new JUnitCoreWrapper(rerunNotifier, jUnitCoreParameters, logger);
for (int i = 0;
i < rerunFailingTestsCount
&& !testFailureListener.getAllFailures().isEmpty();
i++) {
Set<Description> failures = generateFailingTestDescriptions(testFailureListener.getAllFailures());
testFailureListener.reset();
FilterFactory filterFactory = new FilterFactory(testClassLoader);
Filter failureDescriptionFilter = filterFactory.createMatchAnyDescriptionFilter(failures);
rerunCore.execute(testsToRun, failureDescriptionFilter);
}
}
} finally {
runResult = reporterFactory.close();
notifier.removeListeners();
}
return runResult;
}