AssertJ: 调用提取后的FlatMap列表列表

AssertJ: FlatMap list of lists after calling extracting

所以我有一个 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,因为没有 属性 名称可以传入,并且从什么我读过它似乎不适合自定义提取器(否则我不完全确定如何将它组合在一起)。还有另一种方法可以使我返回的列表列表变平吗?我可以走稍微长一点的路线,在列表列表上做断言,或者在断言之前使用 lambda 来收集结果,但我想将断言保持为一个(例如,一些地图断言然后在内容上链接一些断言)

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 来支持这个用例