论据不同!当使用关键字 'this' 的实际方法引用接口实现时

Argument(s) are different! when actual method using keyword 'this' refer to interface implementation

我在构建我的应用程序时正在实施 MVP 架构,我从某个网站获得了 MVP 教程。我想测试我项目中的每一个方法。当我测试我的演示者时,发生了一个错误。它表明预期参数和实际参数不同。

我发现发生该错误是因为我在实际方法中使用了 this 关键字。我正在使用 this 因为我的演示者实现了一些接口 (OnFinishedListener).

这是我的演示者代码和我的演示者测试。

主讲人

public class MainPresenter implements MainContract.Presenter, MainContract.Model.OnFinishedListener {
    private MainContract.View mainView;
    private MainContract.Model mainModel;
    private RetrofitServices retrofitServices;

    public MainPresenter(MainContract.View mainView, RetrofitServices retrofitServices, MainModel mainModel) {
        this.mainView = mainView;
        this.retrofitServices = retrofitServices;
        this.mainModel = mainModel;
    }

    @Override
    public void onFinished(Inquiry inquiry) {
        if(mainView != null){
            mainView.hideProgress();
            mainView.setDataToViews(inquiry);
        }
    }

    @Override
    public void onFailure(Throwable t) {
        if(mainView != null){
            mainView.hideProgress();
            mainView.onResponseFailure(t);
        }
    }

    @Override
    public void onDestroy() {
        mainView = null;
    }

    @Override
    public void requestInquiryData(Inquiry inquiry) {
        if(mainView != null){
            mainView.showProgress();
        }

        mainModel.getInquiry(this, inquiry, retrofitServices);
    }
}

MainPresenterTest

public class MainPresenterTest {
    private MainPresenter mainPresenter;
    @Mock
    RetrofitServices retrofitServices;

    @Mock
    MainContract.View view;

    @Mock
    Inquiry inquiry;

    @Mock
    Throwable throwable;

    @Mock
    MainContract.Model.OnFinishedListener listener;

    @Mock
    MainModel mainModel;

    @Before
    public void setup() {
        MockitoAnnotations.initMocks(this);

    }

    @Test
    public void onFinished_hideProgress_setDataToViews() {
        mainPresenter = new MainPresenter(view, retrofitServices, mainModel);

        mainPresenter.onFinished(inquiry);

        verify(view).hideProgress();
        verify(view).setDataToViews(inquiry);
    }

    @Test
    public void onFinished_doNothing_whenViewIsNull() {
        mainPresenter = new MainPresenter(null, retrofitServices, mainModel);

        mainPresenter.onFinished(inquiry);

        verifyZeroInteractions(view);
    }

    @Test
    public void onFailure_hideProgress_responseFailure() {
        mainPresenter = new MainPresenter(view, retrofitServices, mainModel);

        mainPresenter.onFailure(throwable);

        verify(view).hideProgress();
        verify(view).onResponseFailure(throwable);
    }

    @Test
    public void onFailure_doNothing_whenViewIsNull() {
        mainPresenter = new MainPresenter(null, retrofitServices, mainModel);

        mainPresenter.onFailure(throwable);

        verifyZeroInteractions(view);
    }

    @Test
    public void requestInquiryData_showProgress_getInquiryCalled() {
        mainPresenter = new MainPresenter(view, retrofitServices, mainModel);

        mainPresenter.requestInquiryData(inquiry);

        verify(view).showProgress();

        verify(mainModel).getInquiry(listener, inquiry, retrofitServices);
    }

我想在我的演示者中测试 requestInquiryData 方法(使用 requestInquiryData_showProgress_getInquiryCalled),但是发生了那个错误。当方法使用 this 关键字时如何测试方法?

感谢您的回答。

编辑 这是差异论证的截图

我用 verify(mainModel).getInquiry(mainPresenter, inquiry, retrofitServices); 替换 verify(mainModel).getInquiry(listener, inquiry, retrofitServices); 上的侦听器来解决这个问题,因为 thismainModel.getInquiry(this, inquiry, retrofitServices); 上引用 MainPresenter.java class 而不是 MainContract.Model.OnFinishedListener

我不知道这是否是在 android 开发中测试 MVP 架构的最佳实践,请随时纠正我。谢谢