2010-11-19 4 views
2


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()); 
} 

Répondre

5

Qu'est-ce que vous êtes réellement voir est la propriété du système line.separator est nulle. Je ne peux pas expliquer pourquoi basé sur ce que je vois mais si vous pouvez le tester essayer:

java.security.AccessController.doPrivileged(
       new sun.security.action.GetPropertyAction("line.separator")); 
+1

+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) '. –

+1

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

+0

Génial! va mémoriser ce petit tour maléfique – mhaller