2008-09-30 77 views
61

我对匹配者来说比较新。我正在与JUnit结合使用hamcrest,我有点喜欢它。与Hamcrest的多个正确结果(有没有匹配器?)

有没有办法说明多种选择中的一种是正确的?

喜欢的东西

assertThat(result, is(either(1, or(2, or(3))))) //does not work in hamcrest 

的方法我测试的回报集合中的一个元素。该列表可能包含多个候选人。我目前的实施返回第一次,但这不是一个要求。如果任何可能的候选人被退回,我希望我的测试成功。你如何在Java中表达这一点?

(我打开hamcrest替代品)

回答

91
assertThat(result, anyOf(equalTo(1), equalTo(2), equalTo(3))) 

Hamcrest tutorial

anyOf - 比赛如果任何匹配器匹配,短路(像Java ||)

另请参阅Javadoc

此外,你可以编写自己的匹配器,这很容易做到。

71

马科斯是对的,但你也有其他选择。首先,有一个非此即彼/或:

assertThat(result, either(is(1)).or(is(2))); 

,但如果你有两个以上的项目就可能会得到笨拙。另外,类型分析者有时候会觉得奇怪。对于你的情况,你可以这样做:

assertThat(result, isOneOf(1, 2, 3)) 

,或者如果你已经在一个阵列/收藏您的选择:

assertThat(result, isIn(theCollection)) 

参见Javadoc

+0

嗯...对于一些不可理解的原因,我的Eclipse环境(这只是大约6个月)有一个古老的Hamcrest图书馆,我没有得到这些好东西。 – CurtainDog 2012-06-27 06:50:36