实际调用具有不同的参数Unit Presenter



我为Presenter创建了一个单元测试。如果成功地从API加载数据,则我的演示者实现侦听器回调(使用交互程序):

PresenterTest.java

public class MainContactPresenterTest {
@Mock LoadContactInteractor loadContactInteractor;
@Mock ApiService apiService;
@Mock LoadContactView loadContactView;
@Mock ContactRepository contactRepository;
@Mock LoadContactInteractor.OnLoadDataFinishedListener listener;
@InjectMocks MainContactPresenterImpl presenter;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void getContactLists() {
// given
// when
presenter.fetchRemoteContacts();
// then
Mockito.verify(loadContactInteractor).onLoadData(listener);
}
}

这是我的演示者:

public class MainContactPresenterImpl implements MainContactPresenter,
LoadContactInteractor.OnLoadDataFinishedListener {
private LoadContactView loadContactView;
private LoadContactInteractor loadContactInteractor;
private ContactRepository contactRepository;
@Inject
public MainContactPresenterImpl(LoadContactInteractor loadContactInteractor,
@NonNull LoadContactView loadContactView,
ContactRepository contactRepository) {
this.loadContactView = loadContactView;
this.loadContactInteractor = loadContactInteractor;
this.contactRepository = contactRepository;
}
@Override
public void onSuccessLoad(List<Contact> contacts) {
loadContactView.saveDataToLocalStorage(contacts);
}
@Override
public void onErrorLoad() {
loadContactView.dismissProgress();
loadContactView.showErrorMessage();
}
@Override
public void preCheckCacheData() {
if (contactRepository.getContactCount() == 0) {
// Load contacts from Server
fetchRemoteContacts();
} else {
fetchLocalContacts();
}
}
@Override
public void fetchRemoteContacts() {
loadContactView.showProgress();
loadContactInteractor.onLoadData(this);
}
}

但当我运行测试时,我发现verify中的mocking参数不匹配。我的演讲者一定是一场争论。不是听众。

Argument(s) are different! Wanted:
loadContactInteractor.onLoadData(
listener
);
Actual invocation has different arguments:
loadContactInteractor.onLoadData(
fanjavaid.gojek.com.contacts.presenter.MainContactPresenterImpl@1757cd72
);

如何处理?谢谢

您正在创建一个mock。。。

@Mock LoadContactInteractor.OnLoadDataFinishedListener listener;

然后你再也不用它了,当verify告诉你它并没有被实际使用时,你表现得很惊讶。为什么?当然,它没有被使用,因为你从来没有在任何地方使用过它,那么你的类应该如何知道使用那个mock对象呢?

您的MainContactPresenterImpl不使用OnLoadDataFinishedListener作为外部依赖项(然后您可以通过@InjectMocks注入它),它本身就是一个监听器,因此嘲笑另一个监听器在这里毫无意义。

换句话说,MainContactPresenterImpl没有OnLoadDataFinishedListenerfield,所以Mockito当然无法在这个不存在的领域中注入一些东西。要使类似的操作正常,您需要添加这样一个字段,然后在调用onLoadData方法时使用该字段的内容。

您的方法的唯一调用在这里。。。

loadContactInteractor.onLoadData(this);

在这种情况下this是什么?它是包含方法的MainContactPresenterImpl对象,换句话说,就是您的presenter

所以,有效的是…

Mockito.verify(loadContactInteractor).onLoadData(presenter);

相关内容

  • 没有找到相关文章

最新更新