断言时包含所有'包含所有'在Spock

时间:2016-08-12 07:42:47

标签: groovy spock assertions

我需要执行断言,即集合包含来自其他集合的所有元素。

以下测试应该失败,因为第一个集合不包含来自第二个集合的7

def first = [6, 1, 5, 2, 4, 3]
def second = [3, 4, 2, 5, 7, 6]
expect:
first.containsAll(second)

但是,测试失败根本不可读。目前尚不清楚只有7缺失:

left.containsAll(right)
|    |           |
|    false       [3, 4, 2, 5, 7, 6]
[6, 1, 5, 2, 4, 3]

AssertJ处理得更好:

java.lang.AssertionError: 
Expecting:
 <[6, 1, 5, 2, 4, 3]>
to contain:
 <[3, 4, 2, 5, 7, 6]>
but could not find:
 <[7]>

在Spock获取更好的containsAll 失败消息时会出现什么样的断言?

2 个答案:

答案 0 :(得分:4)

我想你可以乱砍并做(right - left).isEmpty()之类的事情,它应该打印出正确但不在左边的元素。

这有点像一种hacky方式,但实际上我能想出任何东西

答案 1 :(得分:4)

我同意AssertJ有更好的消息,你可以在Spock测试中使用AssertJ。

除此之外,你必须定义你自己的断言信息

assert first.containsAll(second), "$first does not contain all from $second. Missing elements: " + (second - first)