我有一个静态 void 方法,它根据输入的字符串打印出一条语句,然后返回。我正在尝试使用 jUnit 来确保打印语句对于给定的输入是正确的。
我尝试使用assertEquals(expected, System.method("input"));
我收到错误“Assert 类型中的方法 assertEquals(Object, object) 不适用于参数 (String, Void)。”我理解这个错误,但我一直无法找出如何以不同的方式编写我的测试用例,以便我可以比较两者。
最佳答案
扩展@tradeJmark的答案;假设您的静态方法(要测试的方法)正在调用 System.out.print* 来执行某些操作;那么你可以通过以下方式“劫持”System
的OutputStream
:
@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);
}
关于java - Assert 类型中的方法 assertEquals(Object, object) 不适用于参数 (String, Void),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45449332/