如何在Mockito中模拟具有不同参数的方法的不同响应

时间:2018-10-11 12:45:39

标签: unit-testing mockito

我正在使用Mockito模拟我的外部服务,并且处理外部服务的方法如下:

TabLayoutViewController

我嘲笑我的回答如下:

protected override void OnCreate(Bundle bundle)
{
    base.OnCreate(bundle);

    SetContentView(Resource.Layout.TabLayoutView);

    var set = this.CreateBindingSet<TabLayoutViewController, TabLayoutViewModel>();

    set.Apply();

    if (bundle == null)
    {
        ViewModel.ShowInitialViewModelsCommand.Execute();
    }
}

到现在为止一切正常。但是,如果我使用另一个RequestParams对象为我的callExternal方法进行了另一个模拟,那么它将在这里感到困惑,并且不知道它应该模拟哪个响应,例如:

public class ExternalConnector{
    public ResponseRaw callExternal(RequestParams request, ResponseRaw responseType){
    ...my implementation to call external service...
    }
}

问题在于myParameter.getClass()和myParameter2.getClass()都返回相同的RequestParams类类型,因此,对于这两种情况,模拟的签名基本上是相同的。

我试图将模拟的签名从isA更改为eq,但仍然无法正常工作:

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));

现在有人可以在这里帮助我吗?谢谢

0 个答案:

没有答案