我正在使用一些遺留代碼,它本身有一些System.out.print
命令。 我的eCobertura插件顯示這行紅色,所以我想單元測試它們。我們應該單元測試控制檯輸出嗎?
Here在stackoverflow我發現了一種方法來單元測試控制檯輸出,我很有趣。
這是我要做的事:
private final ByteArrayOutputStream outContent = new ByteArrayOutputStream();
@Before
public void setUpStreams() {
System.setOut(new PrintStream(outContent));
}
@After
public void cleanUpStreams() {
System.setOut(null);
}
@Test
public void out() {
System.out.print("Some message from the system");
assertEquals("Some message from the system", outContent.toString());
}
到目前爲止好,測試變爲綠色,但是當我運行的代碼覆蓋率再次插件,我得到這個消息:
異常的線程「Thread-0」java.lang.NullPointerException在 net.sourceforge.cobertura.coveragedata.TouchCollector.applyTouchesOnProjectData(TouchCollector.java:186) at net.sourceforge.cobertura.coveragedata.ProjectData.saveGlobalProjectData(ProjectData.java: 267 )在 net.sourceforge.cobertura.coveragedata.SaveTimer.run(SaveTimer.java:31(Thread.java:662) ) 在java.lang.Thread.run
我有些疑惑:
- 是否正確嘗試單元測試
System.out.print()'s
? - eCoberturain是否與此類型的測試兼容?
- 如果eCobertura與此類型的測試不兼容,爲什麼它會顯示紅色線?
- 我的測試有什麼問題嗎?
- 我使用jUnit 4.11你認爲這與它有關嗎?
- 爲什麼eCobertura給我這個錯誤?
這是一個非常好的答案,我同意所有的觀點。 +1 – sfrj 2013-03-02 15:10:06
謝謝。我很高興能夠提供幫助。 – phisch 2013-03-02 15:13:42