我想使用hamcrest声明一些嵌套列表。 基本上它们是列表中包含的项目列表。
e.g。
List<List<String>> [[bed, bench, bookshelf], [book, bowl, basket], [bar, biscuit, smoked beef]]
我想断言每个项目都以&#34; b&#34;
开头hasItem似乎在第一个列表后停止匹配。
assertThat(list, hasItem(everyItem(startsWith("b"))));
我怎样才能在hamcrest中这样做?
我也试过包含。
...谢谢
答案 0 :(得分:1)
我的直觉是你不会通过使用现有的匹配器到达那里。
但是一旦你理解了事情是如何结合起来的,那么写你自己的匹配器只需要几分钟。
也许你看看我的另一个answer;在那里我举一个完整的例子,如何编写自己的匹配器。那时候,我花了15分钟;虽然我以前从未写过自定义匹配器。
答案 1 :(得分:0)
hasItem
检查是否存在具有给定条件的至少一个项目。你的第一个内部列表符合条件,所以hamcrest将停止。
正如您所知,everyItem
会检查每个项目。
解决方案:assertThat(list, everyItem(everyItem(startsWith("b"))));
为了取悦编译器,您必须将List<List<String>>
投射到Iterable<Iterable<String>> list