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

posted on 2020-12-17 21:36  涤生-三省吾身  阅读(673)  评论(0编辑  收藏  举报

导航