Как проверить привязки с помощью useNativeEncoding = true в Spring Cloud Stream - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь протестировать приложение с настроенной следующей привязкой:

spring:
  cloud:
    stream:
      bindings:
        accountSource:
          destination: account
          producer:
            useNativeEncoding: true
      kafka:
        binder:
          brokers: ${KAFKA_BOOTSTRAP_ADDRESSES}
          producer-properties:
            schema.registry.url: ${KAFKA_SCHEMA_REGISTRY_URL}
            value.subject.name.strategy: io.confluent.kafka.serializers.subject.RecordNameStrategy
        bindings:
          accountSource:
            producer:
              configuration:
                key:
                  serializer: org.apache.kafka.common.serialization.StringSerializer
                value:
                  serializer: io.confluent.kafka.streams.serdes.avro.SpecificAvroSerializer

При нормальном запуске приложения AbstractMessageChannel.interceptorList пусто и отправка сообщения брокеру работает нормально.

При запуске теста (с spring-cloud-stream-test-support связывателем) AbstractMessageChannel.interceptorList заполняется MessageConverterConfigurer, и сообщение преобразуется с использованием механизмов сериализации типа контента (объект Avro преобразуется в JSON).Это тестовый код:

@RunWith(SpringRunner.class)
public class AccountServiceImplTest {

@Autowired
private AccountService accountService;

@Autowired
private MessageCollector messageCollector;

@Autowired
private MessageChannel accountSource;

@Test
public void create() {

    // Simplified code
    AccountCreationRequest accountCreationRequest = AccountCreationRequest.builder().company(company).subscription(subscription).user(user).build();

    accountCreationRequest = accountService.create(accountCreationRequest);

    Message<?> message = messageCollector.forChannel(accountSource).poll();
    // execute asserts on message
}

@TestConfiguration
@ComponentScan(basePackageClasses = TestSupportBinderAutoConfiguration.class)
static protected class AccountServiceImplTestConfiguration {

@EnableBinding({KafkaConfig.AccountBinding.class})

public interface AccountBinding {
    @Output("accountSource")
    MessageChannel accountSource();
}
}

Я что-то упустил, чтобы отключить механизмы сериализации Spring-Cloud-Stream?

1 Ответ

0 голосов
/ 20 июня 2019

Не используйте тестовое связующее вещество; используйте связыватель Кафки со встроенным брокером Кафки.

...