我有一个静态void方法,它根据输入的字符串打印出一个语句,然后返回。我试图使用jUnit来确保print语句对于给定的输入是正确的。
我尝试使用assertEquals(期望,System.method("输入"));
我收到错误"类型Assert中的方法assertEquals(Object,object)不适用于参数(String,Void)。"我理解错误,但我一直无法找到如何以不同的方式编写我的测试用例,以便我可以比较两者。
答案 0 :(得分:1)
扩展@ tradeJmark的答案;假设您的静态方法(要测试的方法)正在调用System.out.print*
来获取某些内容;然后你就可以劫持' OutputStream
System
通过:
@Test
public void testThing() {
final ByteArrayOutputStream out = new ByteArrayOutputStream();
System.setOut(new PrintStream(out));
ClassToTest.testMethod(/* desired input */);
final String written = out.toString();
Assert.assertEquals(expected, written);
}
当然注意到调用System.out.println(...)
(而非System.out.print(...)
)之类的内容会将\n
(或类似的操作系统)附加到书面String
的末尾等
注意:如果你打算这样做;我也建议将它还原到某个地方。像下面这样的东西应该处理这个。
private static PrintStream ORIGINAL_OUT = null;
@BeforeClass
public static void interceptOut() {
ORIGINAL_OUT = System.out;
}
@AfterClass
public static void revertOut() {
System.setOut(ORIGINAL_OUT);
}