【问题标题】:JUnit: Is it possible to output multi-line messages in any of the assert functions?JUnit:是否可以在任何断言函数中输出多行消息?
【发布时间】:2013-06-02 08:46:39
【问题描述】:

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


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

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


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

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

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

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

【问题讨论】:

  • 我使用 Eclipse 进行测试,代码多行生成消息。你如何运行你的 JUnit 测试?
  • 您为何如此关注错误消息的格式?理想情况下,您不应该看到它们。

标签: java junit message assert


【解决方案1】:

我怀疑这可能归结为您的 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 提供的默认输出样式。

【讨论】:

  • 我想在我的环境中生成日志的方式有所不同。我也看不到那个级别的细节。但很高兴知道这应该有效,我没有做错任何事。谢谢一百万!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-29
  • 2010-12-22
  • 1970-01-01
  • 1970-01-01
  • 2011-07-22
  • 1970-01-01
相关资源
最近更新 更多