Czy powinniśmy testować wyjścia konsoli?
Pracuję z jakimś starszym kodem, który ma trochęSystem.out.print
same w sobie polecenia. Moja wtyczka eCobertura pokazuje te linie na czerwono, więc chcę je przetestować.
Tutaj w stackoverflow znalazłem sposób na jednostkowe testowanie wyjść konsoli, co jest bardzo interesujące.
Tak to robię:
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());
}
Do tej pory tak dobrze, test idzie na zielono, ale kiedy ponownie uruchomię wtyczkę pokrycia kodu, otrzymuję ten komunikat:
Wyjątek w wątku „Thread-0” java.lang.NullPointerException w net.sourceforge.cobertura.coveragedata.TouchCollector.applyTouchesOnProjectData (TouchCollector.java:186) w net.sourceforge.cobertura.coveragedata.ProjectData.saveGlobalProjectData (ProjectData.java:267 ) w net.sourceforge.cobertura.coveragedata.SaveTimer.run (SaveTimer.java:31) w java.lang.Thread.run (Thread.java:662)
Mam parę wątpliwości:
Czy próba jednostkowego testu jest poprawna?System.out.print()'s
?Czy eCoberturain jest zgodny z tym typem testu?Jeśli eCobertura nie jest kompatybilny z tym typem testu, dlaczego pokazuje linię czerwoną?Czy coś jest nie tak w moim teście?Używam jUnit 4.11 Czy uważasz, że ma to z tym coś wspólnego?dlaczego eCobertura podaje mi ten błąd?