Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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 assertEquals 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.

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

like image 577
Frank V Avatar asked Jan 30 '10 20:01

Frank V


2 Answers

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

For example:

final ByteArrayOutputStream myOut = new ByteArrayOutputStream(); System.setOut(new PrintStream(myOut));  // test stuff here...  final String standardOutput = myOut.toString(); 
like image 128
Andrzej Doyle Avatar answered Sep 22 '22 17:09

Andrzej Doyle


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

like image 22
Michael Borgwardt Avatar answered Sep 19 '22 17:09

Michael Borgwardt