Embedded Kafka Unit Test
微服务中如果引入kafka UT 该如何完成呢?
废话不多说直接上代码:
@RunWith(SpringRunner.class)
@DirtiesContext
@SpringBootTest
@AutoConfigureWebTestClient
@EmbeddedKafka(partitions = 1, topics = {ReactiveKafkaApplicationTests.INPUT_TOPIC})
@AutoConfigureWireMock(port = 9876)
@ActiveProfiles("test")
public class ReactiveKafkaApplicationTests {
private ObjectMapper objectMapper = new ObjectMapper();
static final String INPUT_TOPIC = "test-topic";
@Autowired
private ReactiveStringRedisTemplate reactiveRedisTemplate;
@Autowired
private EmbeddedKafkaBroker embeddedKafkaBroker;
@Test
public void testReceiveMsg() throws ExecutionException, InterruptedException, JsonProcessingException {
Map<String, Object> senderProps = KafkaTestUtils.producerProps(embeddedKafkaBroker);
// senderProps.put("key.serializer", StringSerializer.class);
// senderProps.put("value.serializer", StringSerializer.class);
KafkaProducer producer = new KafkaProducer<>(senderProps);
producer.send(new ProducerRecord<>(INPUT_TOPIC, 0, 1, "Hello")).get();
TestReactiveRequest request = new TestReactiveRequest();
FluxExchangeResult<String> result = webClient.post()
.uri("/testSSE")
.contentType(MediaType.APPLICATION_JSON)
.body(Mono.just(request), TestReactiveRequest.class)
.exchange()
.returnResult(String.class);
StepVerifier.create(result.getResponseBody())
.expectNext("Hello")
.expectNextCount(1)
.thenCancel()
.verify();
}
}
@RunWith(SpringRunner.class)
@EmbeddedKafka(partitions = 1, topics = { "testTopic" })
@SpringBootTest
public class SimpleKafkaTest {
private static final String TEST_TOPIC = "testTopic";
@Autowired
EmbeddedKafkaBroker embeddedKafkaBroker;
@Test
public void testReceivingKafkaEvents() {
Consumer<Integer, String> consumer = configureConsumer();
Producer<Integer, String> producer = configureProducer();
producer.send(new ProducerRecord<>(TEST_TOPIC, 123, "my-test-value"));
ConsumerRecord<Integer, String> singleRecord = KafkaTestUtils.getSingleRecord(consumer, TEST_TOPIC);
assertThat(singleRecord).isNotNull();
assertThat(singleRecord.key()).isEqualTo(123);
assertThat(singleRecord.value()).isEqualTo("my-test-value");
consumer.close();
producer.close();
}
private Consumer<Integer, String> configureConsumer() {
Map<String, Object> consumerProps = KafkaTestUtils.consumerProps("testGroup", "true", embeddedKafkaBroker);
consumerProps.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");
Consumer<Integer, String> consumer = new DefaultKafkaConsumerFactory<Integer, String>(consumerProps)
.createConsumer();
consumer.subscribe(Collections.singleton(TEST_TOPIC));
return consumer;
}
private Producer<Integer, String> configureProducer() {
Map<String, Object> producerProps = new HashMap<>(KafkaTestUtils.producerProps(embeddedKafkaBroker));
return new DefaultKafkaProducerFactory<Integer, String>(producerProps).createProducer();
}
}
摘自:
https://stackoverflow.com/questions/48753051/simple-embedded-kafka-test-example-with-spring-boot
浙公网安备 33010602011771号