【发布时间】:2016-07-04 15:35:48
【问题描述】:
我看到了这个post
关于两者的区别:
Matchers.hasItem(..)
Assert.assertThat(items, Matchers.hasItem(Matchers.hasToString("c")));
which states
和
Matchers.contains
但我还是不明白。他们都寻找一个谓词满足。没有?
【问题讨论】:
我看到了这个post
关于两者的区别:
Matchers.hasItem(..)
Assert.assertThat(items, Matchers.hasItem(Matchers.hasToString("c")));
which states
和
Matchers.contains
但我还是不明白。他们都寻找一个谓词满足。没有?
【问题讨论】:
它们几乎相同,但Matchers.hasItem 如上所述
一旦找到匹配的项目就会停止
然后Matchers.contains
被检查的迭代必须只产生一项
不同的是,第一个检查是否至少有一个项目(可能是两个或更多),而第二个检查是否恰好有一个项目(只有一个,没有更多)。
【讨论】:
使用hasItem,iterable 需要至少有一项与参数匹配器匹配。此外,它可以有更多的项目(匹配或不匹配),以任何顺序。 (匹配器在每个元素上尝试,直到其中一个匹配,其余的被忽略。)
使用contains,iterable 需要具有与参数(或多个参数)完全匹配的项(或项),顺序相同,没有其他项。 (即第一项需要匹配第一个参数匹配器,第二项需要匹配第二个参数匹配器,...最后一项需要匹配最后一个参数匹配器。每个匹配器只在一个元素上尝试。)
只有一个参数,这意味着可迭代对象需要只有一个元素。
【讨论】:
Matchers.both(matcher1).and(matcher2)。