如何知道是什么原因导致assertEquals方法在单元测试中失败?

时间:2018-01-24 09:33:49

标签: java unit-testing logging junit

在对象或集合上使用assertEquals()时,我缺少良好的失败消息。失败时,错误消息使用toString()方法打印出预期对象和实际对象。 它不会确切地打印导致不平等的原因。当然,在比较两个集合时,AssertionError附带的消息对于弄清楚什么是错误是没用的或耗时的。

以下是我不想使用的两种可能的解决方案:

  1. 可以选择编写非常具体的断言,但过于耗时。
  2. 这也是在您的域的equals方法中使用日志记录的选项。如果equals()返回false,它还会输出导致失败的属性。我只需要查看我的控制台并在AssertionError之前看到打印的消息。另一方面,对于集合,使用集合的等于。例如,如果列表不相等,因为1个特定对象仅出现在其中一个列表中,我还希望该特定日志消息出现在控制台中。但是我不想自己编写代码
  3. 使用equals时是否存在具有此类日志记录的框架?

    是否有最佳实践来处理此问题(或者首先避免使用这种问题)?

1 个答案:

答案 0 :(得分:0)

Spock framework提供了这种功能。您可以将任何表达式用作断言,它将准确打印失败的原因:

assert stack.size() == 2  // this is your assertEquals

你得到:

Condition not satisfied:

stack.size() == 2
|     |      |
|     1      false
[push me]

我们现在已经在所有项目中使用Spock代替JUnit,因为它非常方便。