Mockito正在验证错误的方法

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版本。