Должны ли мы тестировать выходы консоли?
Я работаю с устаревшим кодом, который имеет некоторые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" java.lang.NullPointerException в net.sourceforge.cobertura.coveragedata.TouchCollector.applyTouchesOnProjectData (TouchCollector.java:186) в net.sourceforge.cobertura.coveragedata.ProjectData.saveGlobalProjectData (ProjectSource.67). coveragedata.SaveTimer.run (SaveTimer.java:31) в java.lang.Thread.run (Thread.java:662)
У меня есть некоторые сомнения:
Правильно ли попробовать юнит-тест?System.out.print()'s
Совместима ли eCobertura с этим типом теста?Если eCobertura не совместима с этим типом теста, почему она показывает красную линию?Что-то не так в моем тесте?Я использую jUnit 4.11. Как вы думаете, это как-то связано с этим?почему eCobertura дает мне эту ошибку?