当我创建如下对象时如何模拟

时间:2018-11-26 06:17:52

标签: junit mockito

当我的代码看起来像这样时,如何模拟listAPiMetrics

List<JSONObject> metrics = new ApiMetricsClient().listApiMetrics(new ApiIdList(apiIds));

1 个答案:

答案 0 :(得分:1)

您不能嘲笑该行为。因为您是在代码内初始化对象。您需要通过构造器或某种方式注入依赖项。基本上,您需要进行依赖注入

一些模拟框架(如c#中的moq)仅能模拟接口或抽象类型,因此您需要将依赖项作为接口注入,这通常是最常见的方式。诸如mockito / powermock之类的某些框架也允许模拟具体类型(如我所记得,powermock也可以模拟私有方法)。

更改代码以使其工作如下:

class YourClass {
    private IApiMetricsClient apiMetricClient;
    public YourClass(IApiMetricsClient apiMetricClient) {
        this.apiMetricClient = apiMetricClient;
    }

    public [returnType] yourMethod() {
        List<JSONObject> metrics = this.apiMetricClient.listApiMetrics(new ApiIdList(apiIds));
        // other logics and return data or whatever

    }

}