OutputCapture是一个JUnit Rule,用于捕获System.out和System.err输出。只需简单的将捕获声明为一个@Rule,并使用toString()断言。
@Rule
public OutputCapture outputCapture = new OutputCapture();
用法也很方便
@Test
public void testDefaultSettings() {
SampleApplication.main(new String[]{});
String output = this.outputCapture.toString();
TestCase.assertTrue("Wrong output: " + output, output.contains("Hello ouyang"));
}
看看它的部分源码实现,捕获System.out和System.err输出。
protected void captureOutput() {
AnsiOutputControl.get().disableAnsiOutput();
this.copy = new ByteArrayOutputStream();
this.captureOut = new CaptureOutputStream(System.out, this.copy);
this.captureErr = new CaptureOutputStream(System.err, this.copy);
System.setOut(new PrintStream(this.captureOut));
System.setErr(new PrintStream(this.captureErr));
}
@Override
public String toString() {
flush();
return this.copy.toString();
}