7

所以我有一个字符串/字符串列表对的映射,我想做的是在提取后,将返回的列表组合成一个列表,我可以在该列表上执行更多断言:

我的测试.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 来收集结果,但我想将断言保持为一个(例如,一些地图断言然后在内容上链接一些断言)

4

1 回答 1

16

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

于 2017-07-14T03:51:21.503 回答