如何使用hamcrest java断言嵌套列表

时间:2016-09-20 15:31:44

标签: java nested-lists hamcrest

我想使用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中这样做?

我也试过包含。

...谢谢

2 个答案:

答案 0 :(得分:1)

我的直觉是你不会通过使用现有的匹配器到达那里。

但是一旦你理解了事情是如何结合起来的,那么写你自己的匹配器只需要几分钟。

也许你看看我的另一个answer;在那里我举一个完整的例子,如何编写自己的匹配器。那时候,我花了15分钟;虽然我以前从未写过自定义匹配器。

答案 1 :(得分:0)

hasItem检查是否存在具有给定条件的至少一个项目。你的第一个内部列表符合条件,所以hamcrest将停止。

正如您所知,everyItem会检查每个项目。

解决方案:assertThat(list, everyItem(everyItem(startsWith("b")))); 为了取悦编译器,您必须将List<List<String>>投射到Iterable<Iterable<String>> list