Heim >Java >javaLernprogramm >Wie teste ich „System.out.println()' in JUnit?

Wie teste ich „System.out.println()' in JUnit?

Susan Sarandon
Susan SarandonOriginal
2024-12-29 19:57:10711Durchsuche

How to Unit Test `System.out.println()` in JUnit?

System.out.println() mit JUnit testen

Wie können Sie JUnit-Tests für eine Anwendung schreiben, die Fehlermeldungen in die Standardausgabe schreibt? , insbesondere wenn diese Nachrichten inkonsistent und unzuverlässig sind? Um diese Szenarien effektiv zu testen, müssen Sie die Konsolenausgabe erfassen und ihren Inhalt bestätigen.

Konsolenausgabe umleiten

Um die Konsolenausgabe zu erfassen, müssen beide Standardausgaben (System.out) umgeleitet werden ) und Standardfehler (System.err) während des Tests. Dies kann mit den Methoden ByteArrayOutputStream und System.setXXX erreicht werden. Hier ist eine Beispielimplementierung:

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);
}

Beispieltestfälle

Mit umgeleiteter Konsolenausgabe können Sie Testfälle schreiben, um die erwartete Ausgabe zu bestätigen:

@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());
}

Diese Testfälle stellen sicher, dass die Systemausgabe wie erwartet ist, sodass Sie überprüfen können, ob die Anwendungsprotokolle mit unterschiedlichen Anforderungen konsistent sind Antworten.

Hinweis: In früheren Versionen dieser Antwort wurde System.setOut(null) nach den Tests verwendet, was zu NullPointerExceptions führen konnte. Der aktualisierte Code stellt die ursprünglichen Streams nach jedem Test korrekt wieder her, um solche Probleme zu vermeiden.

Das obige ist der detaillierte Inhalt vonWie teste ich „System.out.println()' 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