假设我有
@Test
public void iterable_matches_order () {
List<String> cloths = Lists.newArrayList("shirts", "shoes", "pants", "socks");
assertThat(cloths, containsInAnyOrder("shi", "sho", "pan", "soc"));
}
我希望这通过,因为shi
包含在shirts
中,sho
包含在shoes
中,依此类推。 containsInAnyOrder
似乎仅在每个条目完全匹配时才通过。
答案 0 :(得分:1)
根据文档:http://hamcrest.org/JavaHamcrest/javadoc/1.3/org/hamcrest/Matchers.html#containsInAnyOrder(T...)与子字符串不匹配,而与整个字符串匹配
assertThat(Arrays.asList("foo", "bar"), containsInAnyOrder("bar", "foo"))
答案 1 :(得分:1)
您可以尝试使用以下内容,但不幸的是,您一次只能检查一个子字符串。您将必须有多个断言,因为您将不知道列表中哪个子字符串失败。
assertThat(cloths,hasItem(contains(“ shi”)))
答案 2 :(得分:0)
默认情况下,containsInAnyOrder
通过equals方法匹配给定的元素。但是您可以提供任意子匹配器。在您的示例中,您可以使用Matchers.containsString
方法:
assertThat(cloths, containsInAnyOrder(containsString("shi"), containsString("sho"),
containsString("pan"), containsString("soc")));
请注意,如果您对cloths
中的项目重新排序,上述声明也会成功。如果订单很重要,请使用Matchers.contains
:
assertThat(cloths, contains(containsString("shi"), containsString("sho"),
containsString("pan"), containsString("soc")));