如何使用Hamcrest来测试异常?

Noe*_*Yap 4 groovy hamcrest

我有以下代码:

def f(String s) {
  assert !s?.contains('.')
}
Run Code Online (Sandbox Code Playgroud)

什么 Hamcrest 匹配器可用于测试断言?我知道我可以使用try/catch块,但我更喜欢将测试的圈复杂度保持为 1。

Ren*_*ato 5

编辑

如果您确实必须使用 Hamcrest,您可以编写如下内容:

assertThat( { f( 'hi.ho' ) }, thrown( MyException ) )
Run Code Online (Sandbox Code Playgroud)

您将需要ThrownMatcher.thrown(..)我只是为了好玩而编写的匹配器。

请参阅此处的要点

但在 Groovy 中,Hamcrest 匹配器可以轻松地替换为更强大的结构。

例如,您可以使用GroovyTestCase来执行此操作:

shouldFail( MyException, { /* code expected to throw MyException*/ } )
Run Code Online (Sandbox Code Playgroud)

最后,如果您认真考虑使用 Spock 进行测试:

http://code.google.com/p/spock/wiki/SpockBasics

例子

when:
f 'something.something'

then:
thrown( TypeOfException )
Run Code Online (Sandbox Code Playgroud)