Java, Junit - Capture the standard input / Output for use in a unit test

2022-09-01 08:17:51

I'm writing integration tests using JUnit to automate the testing of a console based application. The application is homework but this part isn't the homework. I want to automate these tests to be more productive -- I don't want to have to go back and retest already tested parts of the application. (Standard reasons to use Unit tests)

Anyway, I can't figure out or find an article on capturing the output so that I can do on it nor providing automated input. I don't care if the output/input goes to the console/output pane. I only need to have the test execute and verify the the output is what is expected given the input. assertEquals

Anyone have an article or code to help out with this.


答案 1

Use System.setOut() (and ) to redirect the output to an arbitrary printstream - which can be one that you read from programmatically.System.setErr()

For example:

final ByteArrayOutputStream myOut = new ByteArrayOutputStream();
System.setOut(new PrintStream(myOut));

// test stuff here...

final String standardOutput = myOut.toString();

答案 2

The class has methods , and that allow you to set the standard input, output and error streams, e.g. to a that you can inspect at will.SystemsetIn()setOut()setErr()ByteArrayOutputStream


推荐