使用模拟消费者对 MessageListenerContainer 进行单元测试

问题描述 投票:0回答:1

我有一个带有

MessageListenerContainer
bean 的 Spring Boot 应用程序,我想对其进行单元测试。如何使用模拟 Kafka 消费者来模拟接收多条记录?我搜索并找到了
MockConsumer
以及使用普通 Apache Kafka 的示例,但我不知道如何将它与 Spring Kafka 的
MessageListenerContainer
一起使用。

我使用 Kotlin 和 Kotest,但也欢迎使用 Java/JUnit 的答案。我的单元测试不使用

@SpringBootTest
:相反,我在单元测试中手动创建 beans 和依赖项。

java kotlin unit-testing spring-kafka
1个回答
0
投票

至少有几种方法可以在 Spring Boot 中对处理来自 Kafka 的消息进行单元测试。在我看来,最好的选择是专注于单元测试中的业务行为测试,通过集成测试检查应用程序配置,并将内部 Spring 组件的测试留给 Spring 团队。考虑到这一点,您应该专注于测试类实现

MessageListener<K, V> 
(或像
AcknowledgingMessageListener<K, V>
这样的子类之一),而不是使用
ConcurrentKafkaListenerContainerFactory
测试
MockConsumer
,例如:

    @Test
    void testMyMessageListener() {
        SomeCollaborator someCollaborator = Mockito.mock(SomeCollaborator.class);
        MessageListener<String, String> myMessageListener = new MyMessageListener(someCollaborator);
        ConsumerRecord<String, String> consumerRecord = new ConsumerRecord<>("some-topic", 0, 0, "key", "some value");

        myMessageListener.onMessage(consumerRecord);

        Mockito.verify(someCollaborator, Mockito.times(1)).someMethod();
    }    
© www.soinside.com 2019 - 2024. All rights reserved.