首页 > 解决方案 > 在 Scala 中模拟 Kafka 消费者

问题描述

我正在尝试在Scala. 但是,我得到一个NullPointerException.

以下是我的模拟代码:

val kafkaConsumerMock: KafkaConsumer[String, Any] = mock[KafkaConsumer[String, Any]]

我得到的错误是:

java.lang.NullPointerException
    at java.util.HashMap.putMapEntries(HashMap.java:501)
    at java.util.HashMap.<init>(HashMap.java:490)
    at org.apache.kafka.clients.consumer.ConsumerConfig.addDeserializerToConfig(ConsumerConfig.java:523)
    at org.apache.kafka.clients.consumer.KafkaConsumer.<init>(KafkaConsumer.java:629)
    at org.apache.kafka.clients.consumer.KafkaConsumer.<init>(KafkaConsumer.java:610)

当我尝试调试时,我看到有多个构造函数,每个构造函数最后都调用一个私有构造函数。此后,私有构造函数执行一些检查,并抛出一个 NPE,因为我传递给 KafkaConsumer 的配置是null(但模拟不应该要求传递参数,对吧?)。

我无法理解的是,为什么在我尝试模拟时会调用实际代码?另外,我该如何解决这个问题?

编辑:我正在使用MockFactory

附上调试状态。mock返回一个null消费者。

这是调试点状态

标签: scalaapache-kafkamocking

解决方案


当您可以初始化一个模拟库时,您不应该使用模拟库MockConsumer

或者,如果您想将模拟注入另一个类,您还需要将其与org.apache.kafka.clients.consumer.Consumer接口配对


推荐阅读