【问题标题】:integration test case for kafkakafka的集成测试用例
【发布时间】:2020-07-29 18:05:19
【问题描述】:

我对 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测试用例的新手,有人可以帮助我吗

【问题讨论】:

    标签: junit apache-kafka powermock powermockito spring-kafka-test


    【解决方案1】:

    您究竟想在 KafkaKonfig 中测试什么?恕我直言,这是单元测试多余的罕见示例之一。你做的只是在那里初始化 bean。那么在这种情况下,单元测试能给你带来什么价值呢?

    关于向 Kafka 推送一些东西,我想说你不会用单元测试来做,你宁愿编写和集成测试 (IT)。使用单元测试可以测试代码单元的内部逻辑。意思是不关心周围的环境。在您的情况下,Kafka 是一个外部事物,因此在单元测试中您模拟它而不是测试消息是否真的被推送到 Kafka。你可能想看看 mockito framework for mocking (https://site.mockito.org) 如果我理解正确的话,在这种特殊情况下不是你想要实现的,但一般来说可能有用。

    如果您想测试消息是否真的被推送到 Kafka,那么您实际上是想编写 IT 而不是单元测试。您的 IT 的“问题”部分是您实际上不想将消息推送到共享的 Kafka 实例,因为您的测试可能会干扰其他测试在同一个 Kafka 实例上执行的操作(类似于数据库)。例如,如果您在您的机器上运行测试,而其他人将在同一个 Kafka 实例上运行相同的测试,您的结果可能会受到影响。因此,您可能希望为您的 IT 运行嵌入式 Kafka 实例。 (同样,如果您想测试与数据库的交互,那将完全相同,您希望每次测试运行都有一个单独的数据库实例) 使用 Spring 后,您可能希望查看 Spring 框架引入的嵌入式 Kafka。您在 Internet 上找到了很多示例,例如: https://codenotfound.com/spring-kafka-embedded-unit-test-example.html

    我相信您可以在不依赖 Spring 的情况下嵌入 Kafka 实例。随便找个例子吧。

    【讨论】:

    猜你喜欢
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    • 2018-03-29
    • 2018-09-25
    • 2019-11-02
    • 2019-07-12
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多