gpt4 book ai didi

groovy - Spock 验证模拟引发的异常以及模拟交互

转载 作者:行者123 更新时间:2023-12-04 10:24:37 27 4
gpt4 key购买 nike

我遇到的问题是当我尝试在 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()
}

上述测试失败并显示消息: Expected exception java.lang.RuntimeException, but no exception was thrown ,但设置模拟的代码显式抛出异常。

有趣的是,如果你删除最后一行: 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堵塞。

关于groovy - Spock 验证模拟引发的异常以及模拟交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29966866/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com