1

当有断言时,我试图获取多行消息。例如,我有以下代码:


errLog = "错误!在结果中找不到帐户名 \n 预期结果:" + acctName + "\n" + "实际结果:" + 输出 + "\n";

assertTrue(errLog, output.contains(accountType));


在运行时从应用程序中检索输出,而 acctName 是传入的一些数据。

我得到的结果是:
错误!结果中未找到帐户名 预期结果:Name123 实际结果:我的名字是 Name456 类型:junit.framework.AssertionFailedError

我预期的结果是:
错误!结果中未找到帐户名
预期结果:Name123
实际结果:我的名字是 Name456
类型:junit.framework.AssertionFailedError

我在网上到处查找,但似乎我阅读的每个示例都仅用于输出单行消息。那么,是不是不能用现有的断言函数来做多行消息呢?我知道我可能可以重写 assert 函数来满足我的需要,但作为 JUnit 的新手,我想先问问周围没有什么坏处。提前致谢

4

1 回答 1

4

我怀疑这可能归结为您的 IDE - 我刚刚在 IntelliJ IDEA 12 中运行了以下命令:

@Test
public void testABC() {
   assertTrue("This\nis\na\ntest", false);
}

回来了:

java.lang.AssertionError: This
is
a
test
        at org.junit.Assert.fail(Assert.java:91)
        at org.junit.Assert.assertTrue(Assert.java:43)

最简单(也更易读)的方法是编写一个从输出中提取帐户类型的函数,并在断言中使用它:

assertEquals(acctName, extractAccountNameFromOutput(output));

如果测试失败,这将为您提供标准的 JUnit 输出。当测试失败时,您希望输出立即可以理解,因此最好不要更改 JUnit 提供的默认输出样式。

于 2013-06-02T09:04:13.947 回答