2016-08-12 41 views
3

我需要執行聲明,指出集合包含來自其他集合的所有元素。在Spock中聲明'containsAll'時顯示更好的差異

下面的測試失敗了,因爲第一次收集不從第二個包含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]> 

什麼樣的斷言將是斯波克慣用得到更好失敗消息containsAll

+0

我認爲斯波克有更好的支持比較字符串,所以你可以嘗試'first.toString()== second.toString() '。當然這是一個骯髒的黑客... – injecteer

回答

4

我想你可以破解並做類似(right - left).isEmpty()這應該打印出正確的,但不是在左邊的元素。

這是一個有點哈克的方式,但真的什麼我可以拿出

3

我同意AssertJ具有更好的消息,你可以在斯波克測試使用AssertJ。

以外,你必須定義斷言消息你自己喜歡

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