当我的代码看起来像这样时,如何模拟listAPiMetrics
List<JSONObject> metrics = new ApiMetricsClient().listApiMetrics(new ApiIdList(apiIds));
答案 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
}
}