如何为DeadLetter Kafka创建测试

4
在我的微服务中,我创建了一个Kafka生产者,用于将具有JSON格式错误的消息放入DeadLetter中,方式如下:
@Component
public class KafkaProducer {
    @Autowired
    private KafkaTemplate<String, String> kafkaTemplate;
    public void sendDeadLetter(String message) {
        kafkaTemplate.send("DeadLetter", message);
    }
}

我想为项目的完整性创建一个 JUnitTest,但是我不知道如何创建可能发生的 JSON 错误情况以便创建测试。感谢每个人提供的任何帮助和建议。

1
嗨,Michalk,你能给我展示一个简单“发送”测试的例子结构吗?如果你能友好地回答我的问题,那么我就可以接受你的答案了。 - Jacket
2
https://github.com/ConsenSysMesh/kafka-deadletter/tree/master/src/test - aran
嗨,aran,我看到了你的链接,但是我无法将测试适应到我的 deadLetter 上面,也由于我的经验不足,你能帮我构建一个测试来查看消息的正确接收吗?如果你能回答我的问题并不是评论,我可以将你标记为正确答案。 - Jacket
@aran 我只需要一个测试来确保消息的正确接收。 - Jacket
2个回答

3
为了创建一个与你的代码一致的Junit测试,我应该重新创建一个传递扭曲或无效JSON的用例。在你的情况下,我会选择配置一个MockConsumer来读取任何消息,以便邀请你的代码逻辑进入死信。
为了拥有可用的测试结构,我建议采用以下方式:
@KafkaListener(topics = "yourTopic")
public void listen(String message) {
messages.add(message);
}

进行测试的基本结构可能是:

@Test
 public void testDeadLetter(){

//Set up a mockConsumer
MockConsumer<String,String> yourMockConsumer = new MockConsumer<String,String>   (OffsetResetStrategy.EARLIEST);
yourMockConsumer.subscribe(Collections.singletonList("yourTopic"));

//Sending message on embedded Kafka broker
String error = "ERRORE";
kafkaTemplate.send("yourTopic", error);
//Reading the message may take a second
Thread.sleep(1000);
//Create an Assert that checks you that the message is equal to the error specified           above
 }

我希望这对你有用!


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接