You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Groovy Mock Pulsar Producer?测试时遇空指针异常

解决Pulsar Producer模拟时的NullPointerException问题

问题根源

用Mock框架(如Mockito)模拟Producer时,默认所有方法调用都会返回null。你的代码中myProducer.newMessage()返回了null,后续调用.key()自然会抛出NullPointerException。

解决步骤

  • 先模拟MessageBuilder实例,因为newMessage()需要返回该对象才能支撑链式调用
  • 为Producer的newMessage()方法设置返回值,指向模拟的MessageBuilder
  • 为MessageBuilder的key()、value()方法设置返回自身(链式调用要求每个方法返回同一个Builder实例)
  • 最后模拟send()方法的行为,避免后续调用出问题

示例代码(以Mockito为例)

// 模拟MessageBuilder对象
MessageBuilder<String> mockMsgBuilder = Mockito.mock(MessageBuilder.class);
// 模拟Producer对象
Producer<String> myProducer = Mockito.mock(Producer.class);

// 配置newMessage()返回模拟的MessageBuilder
Mockito.when(myProducer.newMessage()).thenReturn(mockMsgBuilder);
// 配置链式方法返回自身,保证调用链不中断
Mockito.when(mockMsgBuilder.key(Mockito.anyString())).thenReturn(mockMsgBuilder);
Mockito.when(mockMsgBuilder.value(Mockito.any(byte[].class))).thenReturn(mockMsgBuilder);
// 模拟send()方法,可根据需求设置返回值或空实现
Mockito.doNothing().when(mockMsgBuilder).send();

配置完成后,业务代码调用myProducer.newMessage().key(...).value(...).send()时,每一步都能拿到非空对象,不会再触发NullPointerException。

内容的提问来源于stack exchange,提问作者Dovile Barkauskaite

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 03:40:54