Тест потоков EmbeddedKafka kafka с SpringBootTest находит два объекта StreamsBuilderFactoryBeans - PullRequest
0 голосов
/ 06 мая 2019

Следуя совету здесь , я пытаюсь использовать встроенный Kafka для тестирования моего приложения Spring Boot Streams.

Однако, просто создавая данную конфигурацию

@Configuration
@EnableKafkaStreams
public class StreamsTestConfiguration {

    @Value("${" + EmbeddedKafkaBroker.SPRING_EMBEDDED_KAFKA_BROKERS + "}")
    private String brokerAddresses;

    @Bean(name = KafkaStreamsDefaultConfiguration.DEFAULT_STREAMS_CONFIG_BEAN_NAME)
    public KafkaStreamsConfiguration kStreamsConfigs() {
        Map<String, Object> props = new HashMap<>();
        props.put(StreamsConfig.APPLICATION_ID_CONFIG, "testStreams");
        props.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, this.brokerAddresses);
        return new KafkaStreamsConfiguration(props);
    }
}

и простой тест

@RunWith(SpringRunner.class)
@SpringBootTest
@EmbeddedKafka(topics = { "topic" })
public class EmbeddedKafkaTest {
    @Autowired
private MyBean tested;

    @Autowired
    private EmbeddedKafkaBroker kafkaBroker;

    @Test
    public void loaded() {}
}

не запускается:

Parameter 0 of method kafkaStreamsFactoryBeanConfigurer in org.springframework.boot.autoconfigure.kafka.KafkaStreamsAnnotationDrivenConfiguration required a single bean, but 2 were found:
    - &defaultKafkaStreamsBuilder: defined by method 'defaultKafkaStreamsBuilder' in class path resource [org/springframework/kafka/annotation/KafkaStreamsDefaultConfiguration.class]
    - &stream-builder-process: defined in null
 [...]
Caused by: org.springframework.context.ApplicationContextException: Failed to start bean 'outputBindingLifecycle'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'kafkaStreamsFactoryBeanConfigurer' defined in org.springframework.boot.autoconfigure.kafka.KafkaStreamsAnnotationDrivenConfiguration: Unsatisfied dependency expressed through method 'kafkaStreamsFactoryBeanConfigurer' parameter 0; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'org.springframework.kafka.config.StreamsBuilderFactoryBean' available: expected single matching bean but found 2: &defaultKafkaStreamsBuilder,&stream-builder-process

Если я удаляю @SpringBootTest из класса тестирования, проблема исчезает, но затем фактический компонентпри тестировании не удается выполнить автоматическое подключение.

Я не определяю StreamBuilderFactoryBean сам, откуда они берутся?

Кроме того: стоит ли использовать эту настройку для тестирования используемого потока?кормить KTable, что позже запрашивается?Я не могу «использовать разные темы для каждого теста», поскольку поток всегда будет использовать одну и ту же тему.Я надеюсь, что смогу справиться с этим с помощью надлежащего дизайна тестового набора, или я ударюсь о стену, которую пока не вижу?

1 Ответ

3 голосов
/ 06 мая 2019

Согласно вашей трассировке стека, вы также используете Spring Cloud Stream с Kafka Streams Binder.Пожалуйста, добавьте соответствующий тег.

Попробуйте удалить явный @EnableKafkaStreams, так как Binder собирается позаботиться об инфраструктуре для вас.

...