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

are `Matchers.hasItem` and `Matchers.contains` the same?

我看到了这个post

关于两者的区别:

Matchers.hasItem(..)

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

Matchers.contains

但我还是不明白。他们都寻找一个谓词满足。没有?

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

will stop as soon as a matching item is found

然后Matchers.contains

the examined iterable must only yield one item

不同的是,第一个检查是否至少有一个项目(可能是两个或更多),而第二个检查是否只有一个项目(只有一个,没有更多)。

对于hasItem,可迭代对象至少需要有一项匹配参数匹配器。此外,它可以以任何顺序包含更多项(匹配或不匹配)。 (在每个元素上尝试匹配器,直到其中一个匹配,其余的将被忽略。)

对于 contains,可迭代对象需要恰好具有与参数(或参数)匹配的项目(或项目),顺序相同,没有其他。 (即第一项需要匹配第一个参数匹配器,第二项需要匹配第二个参数匹配器,...最后一项需要匹配最后一个参数匹配器。每个匹配器只在一个元素上进行尝试。) 只有一个参数,这意味着可迭代对象只需要一个元素。