当前位置:  开发笔记 > 编程语言 > 正文

使用Hamcrest获得多个正确结果(是否存在or-matcher?)

如何解决《使用Hamcrest获得多个正确结果(是否存在or-matcher?)》经验,为你挑选了2个好方法。

我对匹配者比较陌生.我正在和Hamcrest一起玩 JUnit并且我喜欢它.

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

就像是

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

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

(我对hamcrest替代品持开放态度)



1> marcospereir..:
assertThat(result, anyOf(equalTo(1), equalTo(2), equalTo(3)))

来自Hamcrest教程:

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

另见Javadoc.

而且,你可以编写自己的Matcher,这很容易做到.



2> MatrixFrog..:

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

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

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

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

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

assertThat(result, isIn(theCollection))

另见Javadoc.

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有