Spock交互测试优先于例外
为什么在调用模拟方法之前,下面的测试会失败,并显示“调用太少”而不是实际发生在do
方法中的异常?Spock交互测试优先于例外
有什么方法可以改变这种行为吗?
@Test
def "Should Create"() {
when: "We do stuff"
this.someStuff.do()
then: "Should not get exception"
notThrown(Exception)
and: "Should send mail"
1 * mailSession.send(_, _, _, _, _, _, _)
}
您已经发现了一个错误。请在http://issues.spockframework.org提交问题。
PS:代替notThrown(Exception)
,使用noExceptionThrown()
更为常见。代替1 * mailSession.send(_, _, _, _, _, _, _)
,使用1 * mailSession.send(*_)
更为常见。 @Test
是对Spock没有影响的JUnit注释。
do()
方法抛出异常的确切类型是什么?
可能您可能想要使用noExceptionThrown()
Spock方法而不是notThrown(Exception)
。
现在还不确定,但我认为异常的类型并不重要。事情是当抛出异常时,'mailSession.send'不会被调用,所以“then”和“and”两个部分都是可应用的,但“应发送邮件”优先。如果我把“应发送邮件”检查一下,“不应该得到异常”部分处理正确。 – 2014-09-11 19:26:02
老实说,没有足够的细节可以说明。 – topr 2014-09-14 12:17:06
太少的信息来诊断它。 – Opal 2014-09-11 09:35:03