Mockito正在验证错误的方法

时间:2017-03-28 17:33:56

标签: android mockito android-espresso android-testing

我在我的应用程序中使用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。

0 个答案:

没有答案