【发布时间】:2013-10-08 19:06:43
【问题描述】:
我有以下代码:
def f(String s) {
assert !s?.contains('.')
}
可以使用什么 Hamcrest 匹配器来测试断言?我知道我可以使用 try/catch 块,但我更喜欢将测试的圈复杂度保持为一个。
【问题讨论】:
-
检查我写的匹配器,在我的回答中查看编辑。
我有以下代码:
def f(String s) {
assert !s?.contains('.')
}
可以使用什么 Hamcrest 匹配器来测试断言?我知道我可以使用 try/catch 块,但我更喜欢将测试的圈复杂度保持为一个。
【问题讨论】:
编辑
如果你真的必须使用 Hamcrest,你可以这样写:
assertThat( { f( 'hi.ho' ) }, thrown( MyException ) )
您将需要ThrownMatcher.thrown(..) 匹配器,我写它只是为了好玩。
但在 Groovy 中,Hamcrest 匹配器可以很容易地替换为更强大的构造。
例如,您可以使用GroovyTestCase 来执行此操作:
shouldFail( MyException, { /* code expected to throw MyException*/ } )
最后,如果您认真对待测试,请使用 Spock:
http://code.google.com/p/spock/wiki/SpockBasics
例子
when:
f 'something.something'
then:
thrown( TypeOfException )
【讨论】: