I wrote a small webapp to invoke JUnit Tests that specifically rely on the J2EE container to serve any meaning. These tests are JUnit 5 tests that sit within the WAR file source. The application runs the tests perfectly fine when I execute them within an exploded WAR file on my WebLogic server.
When I deploy this app within an WAR file archive to the WebLogic server however it seems the tests are never actually discovered by the test runner. Instead all I get is an error that seems to indicate JUnit can't discover the tests within the archive. Anyone have any ideas or manage to get something like this working successfully as an archive?
Here is the code:
protected static final String JUNIT_REPORTING_FILE_NAME = "TEST-junit-jupiter.xml";
public TestSuiteResponse runSuite(String packageName) {
TestSuiteResponse response = new TestSuiteResponse();
checkArgument(StringUtil.isNotEmpty(packageName), "The 'String packageName' argument is required; it must not be null");
try {
LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
.selectors(selectPackage(packageName))
.filters(includeClassNamePatterns(STANDARD_INCLUDE_PATTERN))
.build();
Launcher launcher = LauncherFactory.create();
launcher.discover(request);
SummaryGeneratingListener summaryGeneratingListener = new SummaryGeneratingListener();
String tmpDir = domainHelperService.getTmpDir();
Path reportPath = Path.of(tmpDir, "myTestResults");
LegacyXmlReportGeneratingListener reportGeneratingListener = new LegacyXmlReportGeneratingListener(reportPath, new PrintWriter(System.out));
launcher.registerTestExecutionListeners(summaryGeneratingListener, reportGeneratingListener);
launcher.execute(request);
TestExecutionSummary summary = summaryGeneratingListener.getSummary();
response.setReportPath(Path.of(reportPath.toString(), JUNIT_REPORTING_FILE_NAME).toString());
TestSuiteResponseDtos.TestExecutionSummary testExecutionSummaryDto = toTestExecutionSummaryDto(summary);
response.setTestExecutionSummary(testExecutionSummaryDto);
logger.info("response={}", response);
} catch (Exception e) {
logger.error(null, e);
throw new RuntimeException(e);
}
return response;
}

