我在我的应用程序中使用Nucleus库跟踪MVP架构,并且正在尝试模拟Presenter for my Fragment。模拟及其重写的调用完全正常,但我的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());
}
我在verify
行上遇到测试失败:
Argument(s) are different! Wanted:
profilePresenter.start(false);
Actual invocation has different arguments:
profilePresenter.start(1);
它似乎正在做的是验证模拟类中的方法 ,如果它是一个模拟对象,则情况不应该如此。这是我的Presenter中的loadUser
方法,它调用start
:
void loadUser(boolean fresh) {
start(fresh ? USER_FRESH : USER_CACHED);
}
start
取整数参数。
我已经调试了测试,并且已经验证了Fragment确实正在按预期使用模拟的Presenter。我还在我的doAnswer
中放置了一个断点,以验证它是否被正确触发,它是。
那么是什么原因导致Mockito在我试图在模拟类中verify
的方法中验证方法调用?我使用的是版本1.10.19。