Ausgabe
Ich versuche, einen Kafka-Verbraucher in zu verspotten Scala
. Allerdings bekomme ich eine NullPointerException
.
Das Folgende ist mein Spottcode:
val kafkaConsumerMock: KafkaConsumer[String, Any] = mock[KafkaConsumer[String, Any]]
Der Fehler, den ich bekomme, ist:
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)
Wenn ich versuche zu debuggen, sehe ich, dass es mehrere Konstruktoren gibt, von denen jeder am Ende einen privaten Konstruktor aufruft. Danach führt der private Konstruktor einige Überprüfungen durch und löst eine NPE aus, da die Konfigurationen, die ich an KafkaConsumer übergebe, lauten null
(aber zum Spotten sollten keine Parameter übergeben werden müssen, oder?).
Was ich nicht verstehen kann, ist, warum wird der eigentliche Code aufgerufen, wenn ich versuche zu spotten? Außerdem, wie kann ich das umgehen?
Bearbeiten: Ich benutzeMockFactory
Anbei ist der Debug-Status. mock
gibt einen null
Verbraucher zurück.
Lösung
Sie können eine externe Mocking-Bibliothek initialisieren MockConsumer
, anstatt sie zu verwenden.
Oder wenn Sie Mocks in eine andere Klasse einfügen möchten, müsste Ihre externe Klasse die org.apache.kafka.clients.consumer.Consumer
Schnittstelle und nicht KafkaConsumer
die Implementierung verwenden.
Beantwortet von – OneCricketeer
Antwort geprüft von – Mildred Charles (FixError Admin)