无法在Spock中的构造函数上创建间谍

时间:2019-04-10 20:14:47

标签: unit-testing groovy spock spock-spy

我要在其中创建间谍的声明:

 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,然后问题就变得微不足道了,不需要间谍)

1 个答案:

答案 0 :(得分:0)

我认为@rafaelim是正确的,KafkaProducer是静态编译的代码,GroovySpies对此不起作用。