kafka的junit集成测试用例

exdqitrt  于 2021-06-04  发布在  Kafka
关注(0)|答案(1)|浏览(721)

我对junit测试用例非常陌生,我想为kafka集成编写junit。下面是我的代码

@EnableKafka
@Configuration
public class KafkaConfiguration {

    @Value("${bts_config}")
    private String bts_config;

    @Value("${grpname}")
    private String grpname;

    @Bean
    public ProducerFactory<String, String> producerFactory() throws URISyntaxException{
        Map<String, Object> config = new HashMap<>();
        config.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bts_config);
        config.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
        config.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
        config.put("security.protocol", "SSL");
        config.put("ssl.protocol", "SSL");

        config.put("ssl.truststore.location", "/dan/client.truststore.jks");
        config.put("ssl.endpoint.identification.algorithm", "https");
        return new DefaultKafkaProducerFactory(config);
    }

    @Bean
    public KafkaTemplate<String, String> kafkaTemplate() throws URISyntaxException {
        return new KafkaTemplate<String, String>(producerFactory());
    }
}

在另一个类中,我有一个方法,通过使用kafkatemplate将消息发送到kafka

public void pushMsgsKafaka(String topicName, String msg) {
        ListenableFuture<SendResult<String, String>> future =  kafkaTemplate.send(topicName, msg);
        future.addCallback(new ListenableFutureCallback<SendResult<String, String>>() {

            @Override
            public void onSuccess(SendResult<String, String> result) {
                //success
            }

            @Override
            public void onFailure(Throwable ex) {
                LOGGER.error("Unable to send message=[" 
                         + msg + "] due to : " + ex.getMessage());
            }

        });
}

现在我想为你写一个测试用例 KafkaConfig (@EnableKafka, @Configuration) 和测试用例 public void sendDataToKafka(String topicName, String msg) 方法
我对写junit测试用例很陌生,有人能帮我吗

vulvrdjw

vulvrdjw1#

你到底想在Kafka考什么?imho这是一个罕见的单元测试冗余的例子。你做什么都不做。那么在这种情况下,单元测试带来了什么价值呢?
关于将某个东西推向kafka,我想说的是,您不会使用单元测试来完成它,而是编写和集成测试(it)。使用单元测试测试代码单元的内部逻辑。意思是一个人不关心周围的环境。在您的例子中,kafka是一个外部事物,因此在单元测试中,您模拟它,而不是测试消息是否真的被推送到kafka。您可能想看看mockito的mocking框架(https://site.mockito.org)如果我理解正确的话,在这种特殊情况下,你不想取得什么成就,但在一般情况下是有用的。
如果您想测试消息是否真的被推送到kafka,那么实际上您需要编写一个it测试,而不是一个单元测试。it的“问题”部分是您实际上不想将消息推送到共享kafka示例,因为您的测试可能会干扰其他测试在同一kafka示例上执行的操作(类似于它是db)。例如,如果您在您的计算机上运行一个测试,而其他人将在同一个kafka示例上运行相同的测试,那么您的结果可能会受到影响。因此,您可能需要为您的its运行一个嵌入式kafka示例(同样,如果您希望测试与db的交互,您希望每个测试运行都有一个单独的db示例,那么这也是完全相同的)使用spring之后,您可能希望查看spring框架引入的嵌入式kafka。你可以在网上找到很多例子,例如:https://codenotfound.com/spring-kafka-embedded-unit-test-example.html
我相信您可以嵌入kafka示例,而不必使用对spring的依赖。举个例子。

相关问题