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

2022-08-31 20:36:12

如何使用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")); 

答案 1

你可以改用 matcher,但你可能需要使用最新版本的 Hamcrest。该方法检查订单。contains

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

您也可以尝试使用,如果订单对您无关紧要。containsInAnyOrder

这是匹配器的代码:contains

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

答案 2

要检查 tha 集合是否包含按预期(给定)顺序排列的项目,您可以使用 Hamcrest 的方法。containsInRelativeOrder

来自 javadoc:

为 Iterable 创建一个匹配器,当对已检查的 Iterable 的单次传递生成一系列项目时匹配该匹配器,这些项目包含逻辑上等于指定项目中相应项目的项目,其相对顺序相同例如:assertThat(Arrays.asList(“a”, “b”, “c”, “d”, “e”), containsInRelativeOrder(“b”, “d”))。

Java Hamcrest 2.0.0.0 的实际情况。

希望这有帮助。