如何模拟KafkaAdminClient

问题描述

我正在尝试对以下代码进行单元测试。我能够测试异常块,但是由于遇到异常,所以无法测试以下块。

如何模拟或设置ListTopicsResult topics = client.listTopics()的值,以使流程进入if块?

if(!topics.names.get().isEmpty()) { response = true; }

public boolean isbrokerRunning() {
    boolean response = false;
    Properties property = new Properties();
    
    try(AdminClient client = KafkaAdminClient.create(property)) {
        ListTopicsResult topics = client.listTopics();
        if(!topics.names.get().isEmpty()) {
            response = true;
        }
    } catch(Exception ex) {
        response = false;
    }
}

解决方法

KafkaAdminClient.create

这是一个静态函数调用,因此您需要模拟静态函数,可以在 mockito 顶部使用 powermockit 来模拟静态函数。

see this example