2016-08-12 6 views
3

コレクションに他のコレクションのすべての要素が含まれているというアサーションを実行する必要があります。Spockで 'containsAll'をアサートするとより良いdiffを表示

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

はしかし、テストの失敗が全く読めない:最初のコレクションが第二1から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ため優れた障害メッセージを取得するにはスポックに慣用だろうアサーションのどのようなちょうど7が欠落していることは明らかではないでしょうか?

+0

のようにあなたの自己を定義する必要が()== second.toString() '。もちろん、それは汚れたハックです... – injecteer

答えて

4

私はハックして、右にあるが左にない要素をプリントする(right - left).isEmpty()のようなことをすると思います。

それはハック方法の少しですが、本当に何私はAssertJが良いのメッセージを持っていることに同意し

3

を考え出すことができますし、スポックのテストでAssertJを使用することができます。それ以外

あなたは `first.toStringを試すことができますので、アサートメッセージ私はスポックの文字列を比較するためのより良いサポートを持っていると思う

assert first.containsAll(second), "$first does not contain all from $second. Missing elements: " + (second - first) 
関連する問題