【问题标题】:are `Matchers.hasItem` and `Matchers.contains` the same?`Matchers.hasItem` 和 `Matchers.contains` 是一样的吗?
【发布时间】:2016-07-04 15:35:48
【问题描述】:

我看到了这个post

关于两者的区别:

Matchers.hasItem(..)

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

Matchers.contains

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

【问题讨论】:

    标签: java matcher hamcrest


    【解决方案1】:

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

    一旦找到匹配的项目就会停止

    然后Matchers.contains

    被检查的迭代必须只产生一项

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

    【讨论】:

    • 谢谢,那么我如何检查至少一个项目是否满足 2 个匹配器?因为 contains 是唯一获得少数匹配器的方法
    【解决方案2】:

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

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

    【讨论】:

    • 谢谢,那么我如何检查至少一个项目是否满足 2 个匹配器?因为 contains 是唯一获得少数匹配器的方法
    • @EladBenda2 如果我理解正确(您想确保有一个项目被两个匹配器匹配),请查看Matchers.both(matcher1).and(matcher2)
    猜你喜欢
    • 2017-04-26
    • 2010-11-15
    • 2021-07-15
    • 2019-06-02
    • 2016-03-06
    • 2014-10-23
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多