Сравнение массива настраиваемого объекта с использованием метода assertJ containsOnly () - PullRequest
0 голосов
/ 09 мая 2020

Мой настраиваемый объект выглядит следующим образом:

@Accessors(chain = true)
@Getter
@Setter
@AllArgsConstructor
@ToString
public class SocialLink {

    private String platform;

    private String link;
}

Мой тестовый код выглядит так:

SocialLink[] arr1 = new SocialLink[] {
        new SocialLink("Facebook", "Facebook Link"),
        new SocialLink("Google", "Google Link")
};
SocialLink[] arr2 = new SocialLink[] {
        new SocialLink("Google", "Google Link"),
        new SocialLink("Facebook", "Facebook Link")
};
assertThat(arr1).containsOnly(arr2);

Журнал сбоев:

java.lang.AssertionError: 
Expecting:
  <[SocialLink(platform=Facebook, link=Facebook Link),
    SocialLink(platform=Google, link=Google Link)]>
to contain only:
  <[SocialLink(platform=Google, link=Google Link),
    SocialLink(platform=Facebook, link=Facebook Link)]>
elements not found:
  <[SocialLink(platform=Google, link=Google Link),
    SocialLink(platform=Facebook, link=Facebook Link)]>
and elements not expected:
  <[SocialLink(platform=Facebook, link=Facebook Link),
    SocialLink(platform=Google, link=Google Link)]>

containsOnly () метод отлично работает с массивом строк, но почему он не работает с пользовательским массивом объектов?

1 Ответ

0 голосов
/ 10 мая 2020

Если вы не хотите или не можете переопределять равенства, попробуйте вызвать usingRecursiveComparison в сочетании с ignoringAllOverriddenEquals (по умолчанию при переопределении используется рекурсивное сравнение, равное) или более мелкомасштабные альтернативы ignoringOverriddenEqualsForTypes, ignoringOverriddenEqualsForFields или ignoringOverriddenEqualsForFieldsMatchingRegexes

 assertThat(links1).usingRecursiveComparison()
                   .ignoringAllOverriddenEquals()
                   .ignoringCollectionOrder() 
                   .isEqualTo(expectedLinks);

Обратите внимание, что рекурсивное сравнение на данный момент предоставляет только утверждение isEqualTo.

См. https://assertj.github.io/doc/#assertj -core-recursive-compare -ignoring-equals для подробностей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...