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(_, _, _, _, _, _, _) 
} 
+0

太少的信息来诊断它。 – Opal 2014-09-11 09:35:03

您已经发现了一个错误。请在http://issues.spockframework.org提交问题。

PS:代替notThrown(Exception),使用noExceptionThrown()更为常见。代替1 * mailSession.send(_, _, _, _, _, _, _),使用1 * mailSession.send(*_)更为常见。 @Test是对Spock没有影响的JUnit注释。

do()方法抛出异常的确切类型是什么?

可能您可能想要使用noExceptionThrown() Spock方法而不是notThrown(Exception)

+0

现在还不确定,但我认为异常的类型并不重要。事情是当抛出异常时,'mailSession.send'不会被调用,所以“then”和“and”两个部分都是可应用的,但“应发送邮件”优先。如果我把“应发送邮件”检查一下,“不应该得到异常”部分处理正确。 – 2014-09-11 19:26:02

+0

老实说,没有足够的细节可以说明。 – topr 2014-09-14 12:17:06