Я реализую архитектуру MVP при создании своих приложений, я получаю руководство по MVP с какого-то веб-сайта. Я хочу проверить каждый метод в моем проекте. Когда я тестировал своего докладчика, произошла ошибка. Это говорит о том, что ожидаемые аргументы и фактические аргументы разные.
Я понял, что эта ошибка произошла, потому что я использую ключевое слово this
в моем реальном методе. Я использую this
, потому что мой докладчик реализует некоторый интерфейс (OnFinishedListener
).
Вот мой код для моего докладчика и мой тест для докладчика.
MainPresenter
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
?
Спасибо за ваш ответ.
EDIT
Это скриншот аргумента различия