Mockito-当模拟方法将父实例作为参数时,得到错误的模拟结果

时间:2018-07-29 09:59:14

标签: java unit-testing mockito

我想在我的代码中使用Mockito模拟一些外部Rest服务。 我的代码结构包含一个 BaseParams 类,它是我正在使用的所有请求参数的父类;一个 BaseResponse ,它是我从服务器上收到的所有响应的父类。休息服务。

现在,我要模拟2个请求: getCountries getLanguages ,这些请求需要 CountriesParams LanguagesParams 作为请求参数(都扩展了 BaseParams ),响应将是 CountriesResponse LanguagesResponse ,它们也都扩展了 BaseResponse

我要模拟的方法具有签名:

public BaseResponse sendRequest(BaseParams baseParams, Settings settings, String serviceUrl, BaseResponse baseResponse){
         ...here some calls to external rest service will be performed...
    return baseResponse;
}

下面是我的模拟设置:

        RequestManager requestManager = Mockito.spy(new RequestManager());

        doReturn(MockFactory.mockCountriesResponse())//
                .when(requestManager)//
                .sendRequest(any(CountriesParams.class), any(), eq("service/getCountries"), any(CountriesResponse.class));

        doReturn(MockFactory.mockLanguagesResponse())//
                .when(requestManager)//
                .sendRequest(any(LanguagesParams.class), any(), eq("service/getLanguages"), any(LanguagesResponse.class));

我面临的问题是当我调用testCountries时,它返回了CastException:

  

java.lang.ClassCastException:   com.project.client.responses.LanguagesResponse无法转换为   com.project.client.responses.CountriesResponse

我认为问题在于,模拟设置无法区分需要在此处获取的模拟结果,因为模拟方法具有如此抽象的BaseResponse和BaseParams als参数。

任何人都可以给我一个主意,如何在我的模拟方法中更正模拟参数,以便可以得到正确的模拟结果。谢谢高级

0 个答案:

没有答案