Testen der Systemausgabe in JUnit
In Legacy-Systemen drucken Anwendungen möglicherweise Fehlermeldungen oder Debug-Informationen in die Standardausgabe, anstatt Fehler explizit zurückzugeben . Das Testen einer solchen Ausgabe kann mit JUnit eine Herausforderung sein.
Problem:
Unit-Tests benötigen eine Möglichkeit, den Inhalt der Konsolenausgabe zu bestätigen, um Fälle abzufangen, in denen System.out. println() wird anstelle einer ordnungsgemäßen Fehlerbehandlung verwendet.
Lösung:
Verwenden Mit ByteArrayOutputStream und System.setXXX() können wir die Systemausgabe umleiten und zum Testen erfassen.
Implementierung:
private final ByteArrayOutputStream outContent = new ByteArrayOutputStream(); private final ByteArrayOutputStream errContent = new ByteArrayOutputStream(); private final PrintStream originalOut = System.out; private final PrintStream originalErr = System.err; @Before public void setUpStreams() { System.setOut(new PrintStream(outContent)); System.setErr(new PrintStream(errContent)); } @After public void restoreStreams() { System.setOut(originalOut); System.setErr(originalErr); }
Test Fälle:
@Test public void out() { System.out.print("hello"); assertEquals("hello", outContent.toString()); } @Test public void err() { System.err.print("hello again"); assertEquals("hello again", errContent.toString()); }
Hinweis:
Frühere Versionen dieser Antwort nannten nach den Tests System.setOut(null). Dies ist die Ursache für NullPointerExceptions, auf die Kommentatoren verwiesen haben.
Das obige ist der detaillierte Inhalt vonWie teste ich die Ausgabe von System.out und System.err in JUnit?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!