Home >Java >javaTutorial >How to Test Console Output in JUnit?
Testing Console Output in JUnit
When testing legacy applications with poor design, you may encounter code that writes error messages to standard output. To assert such console output in JUnit, you need a way to redirect and capture the output.
Redirecting Console Output
The Java system can be configured to send console output to specified streams. We can leverage this mechanism to capture and test the output.
Capturing Output with ByteArrayOutputStream
A ByteArrayOutputStream can be used to capture the console output. To do this, we replace the standard output streams with new streams that write to the ByteArrayOutputStream.
Example:
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); }
Testing Console Output
Once the output is captured, we can assert its content using JUnit's assertEquals() method.
Example Test Cases:
@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()); }
Conclusion
By redirecting console output to ByteArrayOutputStreams and using System.setXXX() to configure the system streams, you can effectively test and assert console output in your JUnit tests.
The above is the detailed content of How to Test Console Output in JUnit?. For more information, please follow other related articles on the PHP Chinese website!