【发布时间】: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