Heim >Java >javaLernprogramm >Wie teste ich die Ausgabe von System.out und System.err in JUnit?

Wie teste ich die Ausgabe von System.out und System.err in JUnit?

DDD
DDDOriginal
2024-12-17 16:31:11145Durchsuche

How to Test System.out and System.err Output in JUnit?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn