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

标签 java junit

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

我尝试使用assertEquals(expected, System.method("input"));

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

最佳答案

扩展@tradeJmark的答案;假设您的静态方法(要测试的方法)正在调用 System.out.print* 来执行某些操作;那么你可以通过以下方式“劫持”SystemOutputStream:

@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/

相关文章:

javascript - Android中的Promise,如何实现?

java - 在 LinkedList 的末尾插入

java - 错误时自动恢复的 HTTP 异步下载器

java - 模拟静态方法链

java - Micronaut 设置 EmbeddedServer 进行 Pact 测试

java - Guava null 测试器不断抛出错误

java - 如何在java中的列表结构末尾追加一个元素?

java - 白标错误页面 404 spring boot angular 5

java - MockMVC - 如何在没有 mockMvc 进行实际发布的情况下测试到端点的发布?

java - EasyMock 类扩展模拟不是模拟方法