groovy – Spock验证模拟抛出的异常以及模拟交互
发布时间:2020-12-14 16:32:17 所属栏目:大数据 来源:网络整理
导读:我遇到的问题是当我尝试在then块中验证已抛出异常,并且已经对模拟进行了调用. 看下面的设置: class B { def b(A a) { a.a() }}class A { def a() { }}def "foo"() { given: def a = Mock(A) a.a() { throw new RuntimeException() } B b = new B() when: b.
我遇到的问题是当我尝试在then块中验证已抛出异常,并且已经对模拟进行了调用.
看下面的设置: class B { def b(A a) { a.a() } } class A { def a() { } } def "foo"() { given: def a = Mock(A) a.a() >> { throw new RuntimeException() } B b = new B() when: b.b(a) then: thrown(RuntimeException) 1 * a.a() } 上面的测试失败并显示消息:预期的异常java.lang.RuntimeException,但没有抛出异常,但设置mock的代码显式抛出了异常. 有趣的是,如果删除最后一行:1 * a.a(),测试通过.当在then块中放置另一个不验证异常的断言时,我没有类似的问题. 有什么想法正在发生什么? 解决方法
应按以下方式配置和验证:
@Grab('org.spockframework:spock-core:0.7-groovy-2.0') @Grab('cglib:cglib-nodep:3.1') import spock.lang.* class Test extends Specification { def "foo"() { given: def a = Mock(A) B b = new B() when: b.b(a) then: thrown(RuntimeException) 1 * a.a() >> { throw new RuntimeException() } } } class B { def b(A a) { a.a() } } class A { def a() { } } 如果您同时模拟和验证交互,则应在where / then块中配置模拟行为. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |