Details
-
Type:
Bug
-
Status:
Closed
-
Priority:
Major
-
Resolution: Fixed
-
Affects Version/s: 2.12
-
Fix Version/s: 2.12.3
-
Component/s: Junit 4.x support, Maven Surefire Plugin
-
Labels:None
-
Complexity:Intermediate
-
Testcase included:yes
-
Number of attachments :
Description
The combination Surefire/JUnit 4 causes a NullPointerException in org.apache.maven.plugin.surefire.report.AbstractTextReporter if one has a RunListener configured which (for whatever reason) throws an exception in its #testRunStarted(Description) method.
I have attached
a dummy project; run `mvn test` to see the problem. The cause of this issue is that AbstractTextReporter initializes its testResults field when AbstractTextReporter#testSetStarting(ReportEntry) is called, which (it seems) doesn't happen until JUnit invokes RunNotifier#fireTestStarted(Description). This is too late, because an exception during the invocation of RunNotifier#fireTestRunStarted(Description) causes AbstractTextReporter#testError(ReportEntry, String, String) to be invoked. The result is an NPE on line 103.
Stacktrace:
Exception in thread "ThreadedStreamConsumer" java.lang.NullPointerException at org.apache.maven.plugin.surefire.report.AbstractTextReporter.testError(AbstractTextReporter.java:103) at org.apache.maven.plugin.surefire.report.MulticastingReporter.testError(MulticastingReporter.java:87) at org.apache.maven.plugin.surefire.report.TestSetRunListener.testError(TestSetRunListener.java:150) at org.apache.maven.plugin.surefire.booterclient.output.ForkClient.consumeLine(ForkClient.java:115) at org.apache.maven.plugin.surefire.booterclient.output.ThreadedStreamConsumer$Pumper.run(ThreadedStreamConsumer.java:67) at java.lang.Thread.run(Thread.java:619)
Note that this issue seems to have been the root cause of SUREFIRE-157; the last comment to that ticket also pointed to the late initialisation of the testResults field.
Seems I cannot edit the issue. Anyway, I messed up the last link; should have pointed to this comment.
Also, this issue exacerbates JUnit issue 395.