2010-11-19 10 views
2


Maven SurefireプラグインからNullPointerExceptionが発生します。 DBUnitを使用しているテストでのみ発生します。 Surefireレポートファイルが空です。JUnitランナーは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クラスから書き込み方法が唯一持っています1つのStringパラメータつまり、ランナーは引数としてnullを渡す必要があります。しかし、これはどうやって起こるのですか?

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

答えて

5

あなたが実際に見ているのは、line.separatorです。システムのプロパティはnullです。なぜ私が見るものに基づいて説明することはできませんが、あなたがそれを試すことができます:

+1

+1、ちょうど私にそれを打つ。参考までに、これは単純に 'out.write(lineSeparator)'に向かう 'PrintWriter.newLine'呼び出しから派生させることができます。 –

+1

ありがとうございます!実際にline.separatorプロパティはnullでした。私は、DBUnitの4つのプロパティしか含まれていないPropertiesオブジェクトを使ってSystem.setProperties(props)を呼び出すことによってそれを引き起こしました。このメソッドがすべてのプロパティを置き換えることに気づいていませんでした。私はもっ​​と慎重にjavadocを読んでいたはずです。もう一度、あなたのおかげです。 – prasopes

+0

恐ろしい!この小さな邪悪なトリックを暗記します – mhaller

関連する問題