JUnit 测试时,如何截获 Console 的输出

import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import static org.junit.Assert.*;

public class HelloWorldTest  {
	PrintStream console = null; // 声明(为null):输出流 (字符设备) console
	ByteArrayOutputStream bytes = null; // 声明(为null):bytes 用于缓存console 重定向过来的字符流
	HelloWorld hello;

	@org.junit.Before
	public void setUp() throws Exception {
		hello = new HelloWorld();
		bytes = new ByteArrayOutputStream(); // 分配空间
		console = System.out; // 获取System.out 输出流的句柄
		System.setOut(new PrintStream(bytes)); // 将本来输出到控制台Console的字符流 重定向 到
												// bytes
	}

	@org.junit.After
	public void tearDown() throws Exception {
		System.setOut(console);
	}

	@org.junit.Test
	public void testResult() throws Exception {
		hello.helloWorld();
		String s = new String("Hello World! Hello Java!\n"); // 注意:控制台的换行,这里用
																// '\n' 表示
		assertEquals(s, bytes.toString()); // bytes.toString() 做用是将 bytes内容
											// 转换为字符流
	}
}
相关文章
相关标签/搜索