我正在使用一些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());
}
到目前为止一切顺利,测试变为绿色,但是当我再次运行代码覆盖率插件时,我收到以下消息:
net.sourceforge.cobertura.coveragedata.TouchCollector.applyTouchesOnProjectData(TouchCollector.java:186) 处的线程“Thread-0”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
? - eCoberturrain 是否与此类测试兼容?
- 如果 eCobertura 与此类测试不兼容,为什么它会显示红色线?
- 我的测试有问题吗?
- 我正在使用 jUnit 4.11 你认为这与它有关吗?
- 为什么 eCobertura 给我这个错误?