【问题标题】:Mocking a Kafka consumer in Scala在 Scala 中模拟 Kafka 消费者
【发布时间】:2021-10-17 06:39:06
【问题描述】:

我正在尝试在 Scala 中模拟 Kafka Consumer。但是,我收到了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 消费者。

【问题讨论】:

  • 我们需要整个代码来帮助您,但很确定有些代码没有使用您创建的模拟。
  • 另外你使用的是哪个模拟库?
  • @GaëlJ,我在初始化 mockConsumer 时创建了一个断点。这本身就是失败点。测试甚至还没有开始。

标签: scala apache-kafka mocking


【解决方案1】:

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

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

【讨论】:

  • 我曾尝试使用MockConsumer,但出现错误:type mismatch; found : org.apache.kafka.clients.consumer.MockConsumer[String, Any] required: org.apache.kafka.clients.consumer.KafkaConsumer[String,Any] kafkaConsumerMock, 如何将 MockConsumer 转换为 KafkaConsumer?
  • 你应该改变你的变量类型,无论你在哪里分配它(无论你在哪里注入模拟)只是Kafka消费者接口kafka.apache.org/20/javadoc/org/apache/kafka/clients/consumer/…
【解决方案2】:

你的问题是试图模拟一些不是抽象的类。您可以mock 一些traits 或Java 接口 或抽象类,但不能常规类。因此,正如@OneCricketeer 建议的那样,您可以使用MockConsumer,它应该被分配给Consumer[String, Any] 类型的值:

import org.apache.kafka.clients.consumer.{Consumer, MockConsumer, OffsetResetStrategy}
val kafkaConsumerMock: Consumer[String, Any] = new MockConsumer[String, Any](OffsetResetStrategy.LATEST)

或模拟Consumer[String, Any]

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    • 2017-11-16
    • 2020-07-10
    相关资源
    最近更新 更多