我正试着用spock对一些kafka代码进行单元测试,但是我在截短对 KafkaProducer.send()
功能。下面是我需要了解的一行java代码:
Object out = producer.send(record).get()
这是我的斯波克密码:
given:
Object obj = new Object()
KafkaProducer producer = kafkaProducerService.getProducer()
when:
kafkaProducerService.publish(someData)
then:
1 * producer.send(_ as ProducerRecord).get >> obj
我得到的错误是:
org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object '_' with class 'org.spockframework.lang.Wildcard' to class 'org.apache.kafka.clients.producer.ProducerRecord' due to: groovy.lang.GroovyRuntimeException: Could not find matching constructor for: org.apache.kafka.clients.producer.ProducerRecord(org.spockframework.lang.SpreadWildcard)
我甚至试过用 producer.send(_).get() >> obj
而且这也不管用(使用一个非常令人沮丧的建议) ProducerRecord
):
groovy.lang.MissingMethodException: No signature of method: org.apache.kafka.clients.producer.KafkaProducer.send() is applicable for argument types: (org.spockframework.lang.Wildcard) values: [[*_]]
Possible solutions: send(org.apache.kafka.clients.producer.ProducerRecord), send(org.apache.kafka.clients.producer.ProducerRecord, org.apache.kafka.clients.producer.Callback), find(), find(groovy.lang.Closure), any(), sleep(long)
``` `ProducerRecord` 不是抽象的,不是一个接口,而且肯定有一个构造函数,那么给出什么呢?
1条答案
按热度按时间ilmyapht1#
问题似乎在于您的验证以及您链接了两个方法调用的事实(
.send().get()
). 因此,斯波克不会在上运行验证send
但关于get
无法识别通配符语法。你可能需要这个: