Maison > Java > javaDidacticiel > Comment tester unitairement « System.out.println() » dans JUnit ?

Comment tester unitairement « System.out.println() » dans JUnit ?

Susan Sarandon
Libérer: 2024-12-29 19:57:10
original
710 Les gens l'ont consulté

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

Test de System.out.println() avec JUnit

Comment pouvez-vous écrire des tests JUnit pour une application qui écrit des messages d'erreur sur la sortie standard , surtout lorsque ces messages sont incohérents et peu fiables ? Pour tester efficacement ces scénarios, vous devez capturer la sortie de la console et affirmer son contenu.

Redirection de la sortie de la console

La capture de la sortie de la console nécessite la redirection des deux sorties standard (System.out ) et l'erreur standard (System.err) lors du test. Ceci peut être réalisé en utilisant les méthodes ByteArrayOutputStream et System.setXXX. Voici un exemple d'implémentation :

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);
}
Copier après la connexion

Exemples de cas de test

Avec la sortie de la console redirigée, vous pouvez écrire des cas de test pour affirmer le résultat attendu :

@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());
}
Copier après la connexion

Ces cas de test affirment que la sortie du système est comme prévu, vous permettant de valider si les journaux d'application sont cohérents avec différentes requêtes réponses.

Remarque : dans les versions antérieures de cette réponse, System.setOut(null) était utilisé après les tests, ce qui pouvait conduire à des NullPointerExceptions. Le code mis à jour restaure correctement les flux d'origine après chaque test pour éviter de tels problèmes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal