Я использую Mockito для макета моего внешнего сервиса, и мой метод работы с внешним сервисом выглядит следующим образом:
public class ExternalConnector{
public ResponseRaw callExternal(RequestParams request, ResponseRaw responseType){
...my implementation to call external service...
}
}
, и я высмеиваю свой ответ следующим образом:
ExternalConnector externalConnector = Mockito.spy(new ExternalConnector());
ResonseRaw myMockResponse = ..... mock the response
RequestParams myParameter = ..... mock the params
doReturn(myMockResponse)//
.when(externalConnector)//
.callExternal(isA(myParameter.getClass()), isA(MyResponse.class));
До сих пор это работало нормально.Но если я сделаю еще один макет для моего метода callExternal с другим объектом RequestParams, то он запутается здесь и не будет знать, какой ответ ему нужно смоделировать, что-то вроде:
ResonseRaw myMockResponse = ..... mock the response
RequestParams myParameter = ..... mock the params
doReturn(myMockResponse)//
.when(externalConnector)//
.callExternal(isA(myParameter.getClass()), isA(MyResponse.class));
ResonseRaw myMockResponse2 = ..... mock the response
RequestParams myParameter2 = ..... mock the params
doReturn(myMockResponse2)//
.when(externalConnector)//
.callExternal(isA(myParameter2.getClass()), isA(MyResponse.class));
Проблема в том, что myParameter.getClass() и myParameter2.getClass () оба возвращают один и тот же тип класса RequestParams, и поэтому в основном подпись для макета одинакова для обоих случаев.
Я пытался изменить сигнатуру для моего макета с isA на eq, но она все равно не работала:
doReturn(myMockResponse2)//
.when(externalConnector)//
.callExternal(eq(myParameter), isA(MyResponse.class));
Может кто-нибудь помочь мне в этом вопросе здесь?Спасибо