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 。