Jas*_*son 5 android mockito android-testing android-espresso
我在我的应用程序中使用Nucleus库遵循 MVP 架构,并尝试模拟我的 Fragment 的 Presenter。模拟及其覆盖的调用工作得很好,但我的verify调用很奇怪。首先,这是我的测试:
private User mUser;
private ProfilePresenter mPresenterMock;
@Override
public void setUp() throws Exception {
super.setUp();
mUser = TestUtils.generateTestUser();
mPresenterMock = mock(ProfilePresenter.class);
ProfileFragment fragment = ProfileFragment.newInstance();
fragment.setPresenterFactory(() -> mPresenterMock);
setFragment(fragment);
}
@Test
public void testInitialValues() {
doAnswer(invocation -> {
getFragment().onUserLoaded(mUser);
return null;
}).when(mPresenterMock).loadUser(anyBoolean());
startFragment();
verify(mPresenterMock).loadUser(eq(false));
onView(withId(R.id.empty)).check(matches(not(withEffectiveVisibility(VISIBLE))));
assertEquals(mUser.getFullName(), getFragment().mToolbar.getTitle());
assertEquals(1, getFragment().mVideosRecyclerView.getChildCount());
}
Run Code Online (Sandbox Code Playgroud)
我收到一条测试失败消息verify:
Argument(s) are different! Wanted:
profilePresenter.start(false);
Actual invocation has different arguments:
profilePresenter.start(1);
Run Code Online (Sandbox Code Playgroud)
它似乎正在做的是验证模拟类中的方法,如果它是模拟对象,则不应出现这种情况。这是loadUser我的 Presenter 中调用的方法start:
void loadUser(boolean fresh) {
start(fresh ? USER_FRESH : USER_CACHED);
}
Run Code Online (Sandbox Code Playgroud)
其中start接受一个整数参数。
我已经调试了测试并验证了 Fragment 确实按预期使用了模拟的 Presenter。我还在我的内部放置了一个断点doAnswer来验证它是否被正确触发,确实如此。
那么什么会导致 Mockito 验证我verify在模拟类中尝试的方法内部的方法调用呢?我使用的是1.10.19版本。
| 归档时间: |
|
| 查看次数: |
957 次 |
| 最近记录: |