【发布时间】:2021-01-02 15:09:40
【问题描述】:
假设我有一个类 Foo 有两个 void 方法 bar 和 biz(Object object)
public class Foo {
public void bar(){}
public void biz(Object object){}
}
这两种方法都是具有自己测试用例的复杂方法,但问题是bar() 调用biz(Object object),我想在 bar 的一个测试用例中验证这一点。所以我的测试用例是在 Spock 中设置的。
class FooSpec {
Foo foo = new Foo()
def "test bar"() {
given:
boolean bizCalled = false
foo.metaClass.biz = {Object object -> bizCalled = true}
when:
foo.bar()
then:
0 * _
and:
bizCalled
}
}
我从this question 得到了这个解决方案,问题是在这个例子中bizCalled 总是假的,导致断言失败,即使我已经验证了biz(Object object) 所以bizCalled 应该设置为真。
我使用 metaClass 的方式是否有问题,或者在 spock 中是否有更正确的方法来验证 bar() 在 Spock 中调用 biz(Object object)?
【问题讨论】:
标签: unit-testing groovy spock