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