我正在尝试使用Spock对一些Kafka代码进行单元测试,并且无法对GET /my_index/_search
{
"query": {
"regexp":{
"message": "program.*process.*"
}
}
}
函数的响应进行存根处理。这是我需要解决的Java代码行:
GET /my_index/_search
{
"query": {
"regexp":{
"message": "program.*"
}
}
}
这是我的Spock代码:
KafkaProducer.send()
我得到的错误是:
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
不是抽象的,也不是接口,并且肯定具有构造函数,那么,有什么用呢?
答案 0 :(得分:0)
问题似乎出在您的验证以及您链接了两个方法调用(.send().get()
)的事实上。因此,spock不会在send
上运行验证,而是在get
上运行验证,并且无法识别通配符语法。您可能需要这个:
given:
def sendResult = Mock(Future)
...
then:
1 * producer.send(_ as ProducerRecord) >> sendResult
1 * sendResult.get() >> obj