至于是否值得测试,这取决于你输出的原因.我通常在编写命令行实用程序时测试System.out调用,因为这是用户界面,文本输出很重要.它甚至都不难 – 只需要常规的Java代码.
以下技术显示了如何捕获System.out的值.你甚至不需要一个模拟框架.请注意,它存储“真正的”System.out,因此它可以将其放回最后.如果不这样做,您的其他测试/代码很快就会变得混乱.
import static org.junit.Assert.*;
import java.io.*;
import org.junit.*;
public class ConsoleHandlerTest {
private PrintStream originalSysOut;
private ByteArrayOutputStream mockOut;
@Before
public void setSysOut() {
originalSysOut = System.out;
mockOut = new ByteArrayOutputStream();
System.setOut(new PrintStream(mockOut));
}
@After
public void restoreSysOut() {
System.setOut(originalSysOut);
}
@Test
public void outputIsCorrect() {
new ConsoleHandler().write("hello");
assertEquals("message output", "hello".trim(), mockOut.toString().trim());
}
}