Hamcrest有多个正确的结果(有没有匹配器?)

对于匹配者,我相对比较陌生。 我正在与JUnit结合使用Hamcrest ,我有点儿喜欢它。

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

就像是

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

我正在testing的方法返回集合的一个元素。 该列表可能包含多个候选人。 我目前的实现返回第一个命中,但这不是一个要求。 如果任何可能的候选人被退回,我希望我的testing成功。 你怎么用Javaexpression这个呢?

(我是开放的hamcrest替代品)

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

从Hamcrest教程 :

anyOf – 匹配任何匹配器匹配,短路(如Java ||)

另见Javadoc 。

而且,你可以写自己的匹配器,这很容易做到。

马科斯是正确的,但你也有其他的select。 首先,有一个/或者:

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

但如果你有两个以上的项目,它可能会变得笨拙。 另外,typechecker有时这样的东西很奇怪。 对于你的情况,你可以这样做:

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

或者如果你已经有了一个数组/集合中的选项:

 assertThat(result, isIn(theCollection)) 

另见Javadoc 。