Je reçois une exception NullPointerException du plugin Maven Surefire. Il se produit uniquement sur un test qui utilise DBUnit. Le fichier de rapport Surefire est vide.JUnit runner obtient NullPointerException de java.io.Writer
-------------------------------------------------------
T E S T S
-------------------------------------------------------
org.apache.maven.surefire.booter.SurefireExecutionException: null; nested exception is java.lang.NullPointerException: null
java.lang.NullPointerException
at java.io.Writer.write(Writer.java:140)
at java.io.PrintWriter.newLine(PrintWriter.java:436)
at java.io.PrintWriter.println(PrintWriter.java:585)
at java.io.PrintWriter.println(PrintWriter.java:696)
at org.apache.maven.surefire.report.AbstractFileReporter.testSetStarting(AbstractFileReporter.java:59)
at org.apache.maven.surefire.report.ReporterManager.testSetStarting(ReporterManager.java:219)
at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:138)
at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)
at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:338)
at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:997)
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] There are test failures.
Lorsque je tente d'exécuter le même test de NetBeans IDE en utilisant un coureur JUnit, je reçois la même exception:
Exception in thread "main" java.lang.NullPointerException
at java.io.Writer.write(Writer.java:140)
at org.apache.tools.ant.util.DOMElementWriter.write(DOMElementWriter.java:212)
at org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter.endTestSuite(XMLJUnitResultFormatter.java:171)
at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.fireEndTestSuite(JUnitTestRunner.java:714)
at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:547)
at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:1031)
at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:888)
Test football.dao.jpa.SimpleJPATest FAILED (crashed)
La méthode d'écriture de la classe java.io.Writer a seulement un paramètre String. Cela signifie que le coureur doit passer null comme argument. Mais comment cela se produit-il?
public void write(String str) throws IOException {
write(str, 0, str.length());
}
+1, juste me battre à lui. Pour référence, ceci peut être dérivé de l'appel 'PrintWriter.newLine' qui se contente simplement de' out.write (lineSeparator) '. –
Merci! La propriété line.separator était en effet nulle. Je l'ai provoqué en appelant System.setProperties (props) avec l'objet Properties qui contenait seulement 4 propriétés pour DBUnit. Je n'étais pas au courant que cette méthode remplace toutes les propriétés. J'aurais dû lire le javadoc plus attentivement. Encore une fois, merci à vous deux! – prasopes
Génial! va mémoriser ce petit tour maléfique – mhaller