Assert类型中的方法assertEquals(Object,object)不适用于参数(String,Void)

时间:2017-08-01 23:52:24

标签: java junit

我有一个静态void方法,它根据输入的字符串打印出一个语句,然后返回。我试图使用jUnit来确保print语句对于给定的输入是正确的。

我尝试使用assertEquals(期望,System.method("输入"));

我收到错误"类型Assert中的方法assertEquals(Object,object)不适用于参数(String,Void)。"我理解错误,但我一直无法找到如何以不同的方式编写我的测试用例,以便我可以比较两者。

1 个答案:

答案 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);
}