【发布时间】:2015-02-06 15:42:26
【问题描述】:
我想监视 Spring bean 的方法调用。我检查了docs - Spock 只能通过构造函数创建间谍。 Spock 可以通过 spy 包装已经存在的对象吗?
【问题讨论】:
-
如果我没记错的话,你不能这样做,因为它会创建一个代理,也就是说,它会即时创建一个派生类型。
我想监视 Spring bean 的方法调用。我检查了docs - Spock 只能通过构造函数创建间谍。 Spock 可以通过 spy 包装已经存在的对象吗?
【问题讨论】:
好像不能做,因为API不支持。看看API。以下代码运行时出现错误:
@Grab('org.spockframework:spock-core:0.7-groovy-2.0')
@Grab('cglib:cglib-nodep:3.1')
import spock.lang.*
class Test extends Specification {
def 'test'() {
given:
def o = new Object()
def s = Spy(o)
}
}
【讨论】:
来自官方Spock framework documentation:
您还可以从实例化对象创建间谍。这在您无法完全控制对间谍感兴趣的类型的实例化的情况下可能很有用。 (例如,在 Spring 或 Guice 等依赖注入框架中进行测试时。)
【讨论】: