それ自体にいくつかのSystem.out.print
コマンドがあるレガシーコードを使用しています。私の eCobertura プラグインはこの行を赤く表示するので、単体テストを行いたいと思います。
ここ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」での例外 net.sourceforge.cobertura.coveragedata.TouchCollector.applyTouchesOnProjectData(TouchCollector.java:186) の java.lang.NullPointerException net.sourceforge.cobertura.coveragedata.ProjectData.saveGlobalProjectData(ProjectData.java:267) ) net.sourceforge.cobertura.coveragedata.SaveTimer.run(SaveTimer.java:31) で java.lang.Thread.run(Thread.java:662) で
私はいくつか疑問があります:
- 単体テストを試みるのは正しい
System.out.print()'s
ですか? - eCoberturain はこのタイプのテストに対応していますか?
- eCobertura がこのタイプのテストに対応していない場合、なぜ赤い線が表示されるのですか?
- 私のテストに何か問題がありますか?
- 私はjUnit 4.11を使用していますが、これは何か関係があると思いますか?
- eCobertura でこのエラーが表示されるのはなぜですか?