【问题标题】:How to use Hamcrest to test for exception?如何使用 Hamcrest 测试异常?
【发布时间】:2013-10-08 19:06:43
【问题描述】:

我有以下代码:

def f(String s) {
  assert !s?.contains('.')
}

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

【问题讨论】:

  • 检查我写的匹配器,在我的回答中查看编辑。

标签: groovy hamcrest


【解决方案1】:

编辑

如果你真的必须使用 Hamcrest,你可以这样写:

assertThat( { f( 'hi.ho' ) }, thrown( MyException ) )

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

Gist here

但在 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 )

【讨论】:

  • 我知道Spock,但由于限制不能用于测试。
  • 我喜欢 Hamcrest 的答案,但如果它是一个单独的答案,我会更好地投票并检查它。
  • 我同意,但我认为删除一个答案或回答两次是不行的......所以我只是编辑了ACTUAL答案,最后是我对Spock的建议,所以答案内容还是一样。
  • 我觉得答两遍就好了。你试过了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-23
相关资源
最近更新 更多