AssertJ: список списков FlatMap после вызова извлечения

Итак, у меня есть пара списков Map of String/String, и я хочу после извлечения объединить возвращенные списки в один список, в котором я могу выполнить больше утверждений:

MyTest.java

Map<String, List<String>> testMap  = new HashMap<>();
List<String> nameList = newArrayList("Dave", "Jeff");
List<String> jobList = newArrayList("Plumber", "Builder");
List<String> cityList = newArrayList("Dover", "Boston");

testMap.put("name", nameList);
testMap.put("job", jobList);
testMap.put("city", cityList);

assertThat(testMap).hasSize(3)
    .extracting("name", "city")
    //not sure where to go from here to flatten list of lists
    // I want to do something like .flatMap().contains(expectedValuesList)

Когда я вызываю извлечение, он вытягивает значения списка в список списков, что нормально, но после этого я не могу вызвать flatExtracting, так как нет имен для передачи свойств, и из того, что я прочитал, не похоже как пользовательский экстрактор будет уместно (или я не совсем уверен, как его собрать). Есть ли другой способ сгладить список списков, которые я получаю обратно? Я мог бы пойти немного более длинным путем и сделать утверждения в списке списков, или использовать лямбду перед утверждением, чтобы собрать результаты, но я хотел бы сохранить утверждение как единое целое (например, некоторые утверждения карты затем связывают некоторые утверждения в содержимом)

1 ответ

Решение

flatExtracting не находится в API утверждений карты (пока), что вы можете вместо этого:

assertThat(testMap)
        .hasSize(3)
        .extracting("name", "city", "job")
        .flatExtracting(list -> ((List<String>) list))
        .contains("Dave", "Jeff", "Plumber", "Builder", "Dover", "Boston");

Я закончил создание https://github.com/joel-costigliola/assertj-core/issues/1034 для поддержки этого варианта использования

Другие вопросы по тегам