【问题标题】:Unable to create a Spy on a constructor in Spock无法在 Spock 中的构造函数上创建间谍
【发布时间】:2019-04-10 20:14:47
【问题描述】:

我要创建间谍的声明:

 Producer<String, String> producer = new KafkaProducer<String, String>(producerProps)

我创建间谍的尝试失败了:

 def spySvc = GroovySpy(service, global:true)
    2 * new service.createKafkaProducer() >> mockedProducer; // fail
    2 * new KafkaProducer(_) >> mockedProducer;   // fail
    2 * new KafkaProducer<String,String>(_) >> mockedProducer; //fail

但是当我将 Producer 创建分解到它自己的方法 createKafkaProducer() 并像这样在方法调用上创建一个间谍时,它可以工作:

 2 * service.createKafkaProducer() >> mockedProducer; // success

有什么想法吗?

(我意识到应该重构代码以使用正确的 DI,那么问题很简单,不需要 Spy)

【问题讨论】:

  • "..._那么问题很简单,不需要间谍_" -- 所以你想让它变得困难吗?
  • 我想了解间谍如何更好地工作,为什么当实例化在函数中时它们起作用而在排队时不起作用。周末我去看看源代码,也许我可以自己弄明白。
  • 也许你的类必须是一个 groovy 类,或者至少有一个 Groovy MOP(元对象协议)。见github.com/spockframework/spock/issues/81
  • 我认为@rafaelim 是正确的,KafkaProducer 是静态编译的代码,GroovySpies 不能处理它

标签: unit-testing groovy spock spock-spy


【解决方案1】:

我认为@rafaelim 是正确的,KafkaProducer 是静态编译的代码,GroovySpies 不能处理它。

【讨论】:

    猜你喜欢
    • 2019-12-29
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    • 2015-09-01
    • 2022-06-10
    • 1970-01-01
    相关资源
    最近更新 更多