gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 12:26:26 24 4
gpt4 key购买 nike

我有一个静态 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com