当前位置: 首页 > 知识库问答 >
问题:

Hamcrest的hasItems、contains和containsInAnyOrder有何不同?

翟俊名
2023-03-14
Collection<String> c = ImmutableList.of("one", "two", "three");
assertThat(c, hasItems("one", "two", "three");
assertThat(c, contains("one", "two", "three");
assertThat(c, containsInAnyOrder("one", "two", "three");

共有1个答案

微生雨泽
2023-03-14

hasitems检查:

在检查的可迭代上连续传递至少产生一个项,该项等于指定的中的相应项。

也就是说,它确保集合以任意顺序至少包含这些项。所以,

assertThat(c, hasItems("one", "two"));
assertThat(c, hasItems("three", "two", "one"));
assertThat(c, contains("one", "two")); // Fails

这将失败,因为剩下的“three”不匹配。

assertThat(c, contains("three", "two", "one")); // Fails

此操作失败,因为相应的项不匹配。

另一个相关的匹配器containsinanyOrder检查是否确实存在这些项,但以任何顺序:

assertThat(c, containsInAnyOrder("one", "two")); // Fails
assertThat(c, containsInAnyOrder("three", "two", "one"));
 类似资料:
  • 我有一个整数列表(当前),我想检查这个列表是否包含list expected中的所有元素,而不是list notExpected中的一个元素,因此代码如下所示: 这么久这么好。但当我加上 给了我正确的答案,但我认为我可以很容易地使用hamcrest匹配器。我使用的是junit 4.11和hamcrest 1.3

  • 您能帮助我在使用方法时哪里出错了吗?

  • null > pom包含对Hamcrest-library 1.3、Hamcrest-core 1.3和JUnit 4.11(按照顺序)的显式依赖关系,正如Garrett Hall在IntelliJ 10.5中运行test时获得“nosuchmethoderror:org.hamcrest.matcher.descripmisMatch”时所建议的那样 根据JUnit文档,JUnit4.11Mav

  • 我是不是漏了什么? 这不能编译。Eclipse抱怨"Matcher Asrett类型中的方法断言(T, Matcher)不适用于参数(int, Matcher 我错过了什么东西可以用吗?我在过去使用过其他Hamcrest方法...那么这有什么不同呢?

  • 我尝试获取标题中包含一些单词的链接,但不包含一些单词,我使用以下代码,但它表示这不是有效的XPath表达式。 请在此处找到我的代码: 任何帮助将不胜感激!

  • 问题内容: 是否要保持与旧版本(未生成)的向后兼容性?还是我缺少一个更微妙的细节?我在()中也看到了这种模式,但是归纳为。 问题答案: 之所以使用,是因为它匹配的对象不必与您传递给的对象具有相同的类型;它只要求它们相等。根据规范,如果存在这样的对象,则返回true。请注意,没有什么要求,并且必须是相同的类型。这是因为该方法接受一个as参数,而不仅仅是与该对象相同的类型。 尽管通常已经定义了许多类,