是'Matchers.hasItem`和`Matchers.contains`一样吗?

时间:2016-07-04 15:35:49

标签: java matcher hamcrest

我看到了post

关于:

之间的区别
Matchers.hasItem(..)

Assert.assertThat(items, Matchers.hasItem(Matchers.hasToString("c")));
which states

Matchers.contains

但我仍然没有区别。他们都寻找一个谓词满意度。否?

2 个答案:

答案 0 :(得分:3)

它们几乎相同,但Matchers.hasItem如上所述

  只要找到匹配的项目,

就会停止

然后Matchers.contains

  

被检查的iterable只能生成一个项目

不同之处在于,第一个检查是否至少有一个项目(可能是两个或更多),但第二个检查是否只有一个项目(只有一个项目,不再有项目)。

答案 1 :(得分:1)

使用contains,iterable需要至少有一个与参数匹配器匹配的项。此外,它可以以任何顺序包含更多项目(匹配与否)。 (在每个元素上尝试匹配,直到其中一个匹配,其余的被忽略。)

对于{{1}},迭代需要具有与参数(或参数)匹配的项目(或多个项目),顺序相同,而不是其他项目。 (即第一项需要匹配第一个参数匹配器,第二项需要匹配第二个参数匹配器,...和最后一个项匹配最后一个参数匹配器。每个匹配器只需要一个元素。) 只有一个参数,这意味着迭代需要只有一个元素。