我想在我的代码中使用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参数。
任何人都可以给我一个主意,如何在我的模拟方法中更正模拟参数,以便可以得到正确的模拟结果。谢谢高级