2008-09-30 79 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