如何使用Kafka Binder对Kstream进行单元测试?

时间:2018-11-13 06:30:54

标签: spring junit apache-kafka apache-kafka-streams spring-cloud-stream

我想对Kafka Stream Aggregate进行单元测试,而我完全困惑要使用哪种方法。 我阅读了有关TestSupportBinder的信息,但我认为这不适用于我的情况,因此我使用KafkaEmbedded方法。这就是我初始化嵌入式Kafka的方式。

 @Before
public void setUp() throws Exception{

Map<String, Object> consumerProps = KafkaTestUtils.consumerProps("group-id", "false", embeddedKafka);

consumerProps.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");
consumerProps.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
consumerProps.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);

DefaultKafkaConsumerFactory<Object, LoggerMessage> cf = new DefaultKafkaConsumerFactory<>(consumerProps);
consumer = cf.createConsumer();
embeddedKafka.consumeFromAnEmbeddedTopic(consumer, OUTPUT_TOPIC);
}

我要测试的是以下内容:

public interface Channels {
  String LOGGER_IN_STREAM = "logger-topic-in-stream";
  String LOGGER_IN = "logger-topic-in";
  String LOGGERDATAVALIDATED_OUT = "loggerDataValidated-topic-out";

  @Input(Channels.LOGGER_IN)
  SubscribableChannel processMessage();

  @Input(Channels.LOGGER_IN_STREAM)
  KStream<Object, LoggerMessage> loggerKstreamIn();

  @Output(Channels.LOGGERDATAVALIDATED_OUT)
  MessageChannel validateLoggerData();
}

我收到以下错误消息

  

org.springframework.beans.factory.BeanCreationException:创建名称为'some.domain.Channels'的bean时出错:调用init方法失败;嵌套的异常是java.lang.IllegalStateException:在绑定的工厂之间找不到绑定目标类型的工厂:org.apache.kafka.streams.kstream.KStream:channelFactory,messageSourceFactory

     

原因:java.lang.IllegalStateException:未找到绑定目标类型的工厂:已注册工厂之间的org.apache.kafka.streams.kstream.KStream:channelFactory,messageSourceFactory

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

我错过了将Channels Interface作为MockBean注入。完成后,一切都按预期进行。