Я пытаюсь протестировать приложение с настроенной следующей привязкой:
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?