Используйте AssertJ для проверки того, что элементы списка имеют одинаковое значение, но не один и тот же экземпляр.

Я хотел бы знать, как добиться следующего с помощью AssertJ:

Я тестирую функцию, которая клонирует вершины графа и возвращает клонированные вершины в виде списка. Мой тест должен подтвердить, что клоны имеют то же значение, что и вершины, и что они не являются одними и теми же экземплярами. Я знаю, как пройти первую часть. Это вторая часть, которая поставила меня в тупик.


person Julian A.    schedule 07.11.2017    source источник
comment
assertThat(результат).isEqualTo(оригинал).isNotSameAs(оригинал)   -  person    schedule 08.11.2017
comment
@Аркадий Спасибо за предложение. Будет ли isNotSameAs() применяться как к списку, так и к его содержимому?   -  person Julian A.    schedule 08.11.2017
comment
нет... Требуются дополнительные исследования :)   -  person    schedule 08.11.2017
comment
:) понятно. Спасибо. Я думаю, что это может привести к ложному отрицательному результату: когда список является одним и тем же экземпляром, но элементы, которые он содержит, - нет. Принимая во внимание, что меня не интересует экземпляр контейнера списка - меня интересует только содержимое.   -  person Julian A.    schedule 08.11.2017
comment
doesNotContainAnyElementsOf ? Хотя можно использовать равные   -  person    schedule 08.11.2017
comment
Да, я подумал об этом. Но содержимое списка является объектами-значениями — это позволяет equals возвращать true, когда два объекта имеют одинаковое состояние, но являются отдельными экземплярами. Основываясь на документах, я ожидал, что doesNotContainAnyElementsOf вернет false, потому что оба списка будут сравниваться по значению и, таким образом, будут содержать одни и те же элементы.   -  person Julian A.    schedule 08.11.2017
comment
Моим идеальным методом было бы что-то вроде doesNotContainAnyInstancesIn(otherList), которого не существует.   -  person Julian A.    schedule 08.11.2017
comment
Давайте продолжим обсуждение в чате.   -  person    schedule 08.11.2017


Ответы (1)


Вы можете использовать специальный компаратор для утверждений коллекций:

assertThat(clonedVertices).usingElementComparator(referenceComparator)
                          .doesNotContainAnyElementsOf(originalVertices);

где referenceComparator только хорошо сравнивает...ссылки.

См. http://joel-costigliola.github.io/assertj/assertj-core-features-highlight.html#custom-comparison-strategy

Надеюсь, поможет

person Joel Costigliola    schedule 08.11.2017