我对匹配者比较陌生。我正在使用 hamcrest 与JUnit结合使用,我喜欢它。

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

这样的东西
assertThat( result, is( either( 1, or( 2, or( 3 ) ) ) ) ) //does not work in hamcrest

我正在测试的方法返回一个集合的一个元素。该列表可能包含多个候选人。我当前的实现返回第一个命中,但这不是必需的。如果返回任何可能的候选人,我希望我的测试用例成功。你会如何在Java中表达这一点?

(我对hamcrest-alternatives开放)

有帮助吗?

解决方案

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

来自 Hamcrest教程

  

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

另见 Javadoc

此外,您可以编写自己的Matcher,这很容易做到。

其他提示

马科斯是对的,但你也有其他选择。首先, 是/或:

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

但是如果你有两个以上的物品,它可能会变得笨拙。此外,类型检查器有时会对类似的东西感到奇怪。对于您的情况,您可以这样做:

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

或者如果您已经在数组/集合中有选项:

assertThat(result, isIn(theCollection))

另见 Javadoc

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top