如何使用Hamcrest检查集合中是否包含给定顺序的项目


问题内容

如果给定的集合中包含给定顺序的给定项目,如何使用Hamcrest进行检查?我尝试过,hasItems但是它只是忽略了顺序。

List<String> list = Arrays.asList("foo", "bar", "boo");

assertThat(list, hasItems("foo", "boo"));

//I want this to fail, because the order is different than in "list"
assertThat(list, hasItems("boo", "foo"));

问题答案:

您可以改用contains匹配器,但可能需要使用最新版本的Hamcrest。该方法检查顺序。

assertThat(list, contains("foo", "boo"));

containsInAnyOrder如果订单对您来说没有关系,您也可以尝试使用。

这是contains匹配器的代码:

  public static <E> Matcher<Iterable<? extends E>> contains(List<Matcher<? super E>> itemMatchers)
  {
    return IsIterableContainingInOrder.contains(itemMatchers);
  }