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

how to assert nested lists using hamcrest java

我有一些嵌套列表,我想使用 hamcrest 断言。 基本上它们是列表中包含的项目列表。

例如

List<List<String>> [[bed, bench, bookshelf], [book, bowl, basket], [bar, biscuit, smoked beef]]

我想断言每个项目都以 "b"

开头

hasItem 似乎在第一个列表之后停止匹配。

assertThat(list, hasItem(everyItem(startsWith("b"))));

如何在 hamcrest 中执行此操作?

我也试过包含。

谢谢...

我的直觉是,使用现有的匹配器无法达到目的。

但是编写自己的匹配器...只需要几分钟,一旦您理解了事情是如何组合在一起的。

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

hasItem 检查是否有 至少一个 项符合给定条件。您的第一个内部列表满足条件,因此 hamcrest 将停止。

如您所见,everyItem 检查..每个项目。

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