JUnit中Mock RabbitAdmin类时出现空指针异常问题求助
解决RabbitAdmin Mock时的NullPointerException问题
问题出在链式调用的Mock逻辑上:rabbitAdmin.getQueueProperties("responseQueueName")默认会返回null,直接调用它的get("QUEUE_MESSAGE_COUNT")方法,自然触发空指针异常。Mockito无法直接处理这种链式Mock调用,必须拆分步骤。
解决方案1:Mock Map对象分步处理
先Mock getQueueProperties 方法让它返回一个Mock的Map,再单独Mock这个Map的get方法:
// 额外声明一个Mock的Map @Mock Map<String, Object> queuePropertiesMap; @Mock RabbitAdmin rabbitAdmin; @InjectMocks MyOriginalClass classObj;
测试方法里的代码修改为:
// 第一步:让getQueueProperties返回Mock的Map Mockito.when(rabbitAdmin.getQueueProperties("responseQueueName")).thenReturn(queuePropertiesMap); // 第二步:Mock Map的get方法返回目标值 Mockito.when(queuePropertiesMap.get("QUEUE_MESSAGE_COUNT")).thenReturn(0);
解决方案2:返回真实Map(更简单)
如果不需要灵活修改返回值,直接创建一个真实的Map并返回:
@Mock RabbitAdmin rabbitAdmin; @InjectMocks MyOriginalClass classObj;
测试方法里:
Map<String, Object> queueProps = new HashMap<>(); queueProps.put("QUEUE_MESSAGE_COUNT", 0); Mockito.when(rabbitAdmin.getQueueProperties("responseQueueName")).thenReturn(queueProps);
内容的提问来源于stack exchange,提问作者SrigandanS
相关产品推荐
相关产品推荐

