Как проверить в Assertj Коллекция Set - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть метод, который возвращает список записей.Каждая запись имеет поле Set as.

public class R {
    public final Set s;
}

У меня есть список всех ожидаемых Set - как:

Set<String> set1 = new HashSet<String>(); set1.add("s1");
Set<String> set2 = new HashSet<String>(); set1.add("s2");
Set<String> set3 = new HashSet<String>(); set1.add("s3");

Я хочу проверить простым способом, используя AssertJ (версия 3.11.1).) что ответ List<R> содержит весь определенный набор или, по крайней мере, агрегация всех элементов из этих наборов равна агрегации элементов из наборов set1, set2, set3

ПРИМЕЧАНИЕ: решение ниже равно не работает:

Set allElements = new HashSet<String>();
allElements.addAll(set1);
allElements.addAll(set2);
allElements.addAll(set3);

List<R> result = foo();
org.assertj.core.api.Assertions.assertThat(result)
    .extracting(record -> record.s)
    .containsOnly(allElements);

Я получил:

java.lang.AssertionError: 
Expecting:
  <[["s1.1", "s1.2"],
    ["s2.1", "s2.2"],
    ["s3.1", "s3.2"]]>
to contain only:
  <[["s1.1",
    "s1.2",
    "s2.1",
    "s2.2",
    "s3.1",
    "s3.2"]]>

Ответы [ 2 ]

0 голосов
/ 03 февраля 2019

Похоже на случай использования flatExtracting , попробуйте что-то вроде:

.assertThat(result).flatExtracting(record -> record.s)
                   .containsExactlyInAnyOrderElementsOf(referralSet);
0 голосов
/ 01 февраля 2019

Похоже, containsExactlyInAnyOrderElementsOf ответ

решение:

Set<Set<String>> referralSet = new HashSet<>();
referralSet.add(set1);
referralSet.add(set2);
referralSet.add(set3);

org.assertj.core.api.Assertions.assertThat(result)
        .extracting(record -> record.s)
        .containsExactlyInAnyOrderElementsOf(referralSet);
...