2016-08-12 4 views
3

Мне нужно выполнить утверждение, что коллекция содержит все элементы из другой коллекции.Показать лучше diff при утверждении 'containsAll' в Spock

Следующий тест должен потерпеть неудачу, потому что первая коллекция не содержит 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(), которое должно распечатывать элементы, которые находятся справа, но не слева.

Это немного Hacky способом, но на самом деле все, что я могу придумать

3

Я согласен, что AssertJ имеет лучшие сообщения, и вы могли бы использовать AssertJ в тестах Спок.

Кроме этого вы должны определить сообщение отстаивает свои себя как

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

 Смежные вопросы

  • Нет связанных вопросов^_^