听起来您正在请求类似于 Spring AMQP 测试框架中的内容:https://docs.spring.io/spring-amqp/docs/2.0.3.RELEASE/reference/html/_reference.html#test-harness https://docs.spring.io/spring-amqp/docs/2.0.3.RELEASE/reference/html/_reference.html#test-harness
所以,如果你不擅长额外的变量,你可以借用它solution https://github.com/spring-projects/spring-amqp/tree/master/spring-rabbit-test/src/main/java/org/springframework/amqp/rabbit/test并实施你自己的“线束”。
我认为这应该是对框架的一个很好的补充,所以请提出适当的建议issue https://github.com/spring-projects/spring-kafka/issues我们可以共同为公众带来这样一个工具。
UPDATE
因此,根据 Spring AMQP 基金会,我在测试配置中执行了此操作:
public static class KafkaListenerTestHarness extends KafkaListenerAnnotationBeanPostProcessor {
private final Map<String, Object> listeners = new HashMap<>();
@Override
protected void processListener(MethodKafkaListenerEndpoint endpoint, KafkaListener kafkaListener,
Object bean, Object adminTarget, String beanName) {
bean = Mockito.spy(bean);
this.listeners.put(kafkaListener.id(), bean);
super.processListener(endpoint, kafkaListener, bean, adminTarget, beanName);
}
@SuppressWarnings("unchecked")
public <T> T getSpy(String id) {
return (T) this.listeners.get(id);
}
}
...
@SuppressWarnings("rawtypes")
@Bean(name = KafkaListenerConfigUtils.KAFKA_LISTENER_ANNOTATION_PROCESSOR_BEAN_NAME)
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
public static KafkaListenerTestHarness kafkaListenerAnnotationBeanPostProcessor() {
return new KafkaListenerTestHarness();
}
然后在目标测试用例中我这样使用它:
@Autowired
private KafkaListenerTestHarness harness;
...
Listener listener = this.harness.getSpy("foo");
verify(listener, times(2)).listen1("foo");