Maison >Java >javaDidacticiel >Comment tester les sorties System.out et System.err dans JUnit ?

Comment tester les sorties System.out et System.err dans JUnit ?

DDD
DDDoriginal
2024-12-17 16:31:11215parcourir

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

Test de la sortie du système dans JUnit

Dans les systèmes existants, les applications peuvent imprimer des messages d'erreur ou des informations de débogage sur la sortie standard au lieu de renvoyer explicitement les erreurs . Tester une telle sortie peut être difficile avec JUnit.

Problème :

Les tests unitaires nécessitent un moyen d'affirmer le contenu de la sortie de la console pour détecter les cas où System.out. println() est utilisé à la place d'une erreur appropriée manipulation.

Solution :

L'utilisation de ByteArrayOutputStream et System.setXXX() nous permet de rediriger la sortie du système et de la capturer pour les tests.

Mise en œuvre :

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 Cas :

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

Remarque :

Les versions antérieures de cette réponse appelées System.setOut(null) après les tests. C'est la cause des commentateurs NullPointerExceptions mentionnés.

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!

Déclaration:
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