[FIXED] Verspottung eines Kafka-Konsumenten in Scala

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. mockgibt einen nullVerbraucher zurück.

Dies ist der Debug-Punkt-Status

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.ConsumerSchnittstelle und nicht KafkaConsumerdie Implementierung verwenden.


Beantwortet von –
OneCricketeer


Antwort geprüft von –
Mildred Charles (FixError Admin)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like