【问题标题】:Can Spock spy for real object?Spock 可以监视真实对象吗?
【发布时间】:2015-02-06 15:42:26
【问题描述】:

我想监视 Spring bean 的方法调用。我检查了docs - Spock 只能通过构造函数创建间谍。 Spock 可以通过 spy 包装已经存在的对象吗?

【问题讨论】:

  • 如果我没记错的话,你不能这样做,因为它会创建一个代理,也就是说,它会即时创建一个派生类型。

标签: testing groovy spock


【解决方案1】:

好像不能做,因为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)
    }
}

【讨论】:

  • 这可能不再是这种情况。来自 1.1 发行说明:“您还可以从实例化对象创建间谍。这在您无法完全控制对间谍感兴趣的类型的实例化的情况下可能很有用。(例如,在依赖项中进行测试时)注入框架,例如 Spring 或 Guice。)"
【解决方案2】:

来自官方Spock framework documentation

您还可以从实例化对象创建间谍。这在您无法完全控制对间谍感兴趣的类型的实例化的情况下可能很有用。 (例如,在 Spring 或 Guice 等依赖注入框架中进行测试时。)

【讨论】:

    猜你喜欢
    • 2015-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多