2016-09-20 120 views
2

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

例如

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

我想断言,每一个项目为“B”

hasItem似乎停止第一个列表匹配后开始。

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

我怎样才能做到这一点hamcrest?

我试过也包含。

谢谢...

回答

0

我的直觉是,你不会使用现有的匹配那里。

但是写下自己的匹配器......只需要几分钟,一旦你明白事情是如何结合在一起的。

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

+0

非常感谢您的及时回复啊编译器。 是的,我正在考虑和/或通过for循环遍历每个列表。 我只是认为可能有1个班轮现有的Hamcrest匹配器嵌套列表。 – teak

0

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

如你所想,everyItem检查..每个项目。

解决方法:assertThat(list, everyItem(everyItem(startsWith("b")))); 为了取悦你要投List<List<String>>Iterable<Iterable<String>> list