2010-11-19 29 views
2


我收到來自Maven Surefire插件的NullPointerException。它僅在使用DBUnit的測試中發生。 Surefire報告文件是空的。JUnit runner從java.io.Writer獲取NullPointerException

------------------------------------------------------- 
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. 

當我嘗試使用JUnit運行運行從NetBeans IDE中相同的測試,我得到相同的異常:

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) 

從java.io.Writer中的類方法只有一個String參數。這意味着跑步者必須傳遞null作爲參數。但是,這是如何發生的?

public void write(String str) throws IOException { 
    write(str, 0, str.length()); 
} 

回答

5

你真正看到的是line.separator系統的屬性爲null。我無法解釋爲什麼基於我所看到的,但如果你可以測試它嘗試做:

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

+1,只是打敗了我。作爲參考,這可以從'PrintWriter.newLine'調用派生出來,它只是簡單地按照'out.write(lineSeparator)'的方式。 – 2010-11-19 16:55:55

+1

謝謝! line.separator屬性確實爲null。我通過使用僅包含4個DBUnit屬性的Properties對象調用System.setProperties(props)來實現它。我不知道這種方法取代了所有的屬性。我應該更仔細地閱讀javadoc。再次感謝你們兩位! – prasopes 2010-11-19 17:36:58

+0

太棒了!將背誦這個小惡魔訣竅 – mhaller 2010-11-19 19:19:02

相關問題