无法在Spock中存根卡夫卡制片人的唱片

时间:2018-08-16 18:39:21

标签: java unit-testing apache-kafka spock

我正在尝试使用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不是抽象的,也不是接口,并且肯定具有构造函数,那么,有什么用呢?

1 个答案:

答案 0 :(得分:0)

问题似乎出在您的验证以及您链接了两个方法调用(.send().get())的事实上。因此,spock不会在send上运行验证,而是在get上运行验证,并且无法识别通配符语法。您可能需要这个:

given:
def sendResult = Mock(Future)
...

then:
1 * producer.send(_ as ProducerRecord) >> sendResult
1 * sendResult.get() >> obj