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