使用Mockito编写Spring Boot Kafka监听器测试,解决Jacoco覆盖率为0问题
Kafka监听器的Mockito测试方案(解决Jacoco覆盖率为0问题)
我编写的Kafka消息监听器代码如下:
@KafkaListener(groupId = "group", topics = "topic") public void consume(String message) { log.info(message); serviceProcess.process(message); } class ServiceProcess { public boolean process(String str) { // 业务逻辑实现 } }
遇到的问题:使用Embedded方式编写测试用例时,Jacoco显示覆盖率为0,因此需要仅用Mockito编写测试,满足以下要求:
- 测试无返回值(void)的
consume方法 - 测试用例基于Mockito实现
对应的Mockito测试解决方案代码如下:
@ExtendWith(MockitoExtension.class) public class MessageConsumerTest { @Mock ServiceProcess serviceProcess; @InjectMocks MessageConsumer messageConsumer; // 假设监听器所在类为MessageConsumer @Test void consumeTest() { String testMessage = "test-content"; // 直接调用监听器的consume方法,传入测试消息 messageConsumer.consume(testMessage); // 验证依赖的process方法被调用1次,参数匹配测试消息 verify(serviceProcess, times(1)).process(testMessage); } }
注:原参考方案中的
listener方法和MessageConsumerService需对应实际的监听器方法与依赖类,上述代码已根据原监听器逻辑做修正,确保测试逻辑匹配。
内容的提问来源于stack exchange,提问作者Ravi Thapa
相关产品推荐
相关产品推荐

