使用mockito来存根空方法

时间:2017-03-01 09:15:24

标签: android mockito

mockito-core:2.7.10

我正在使用mockito

测试以下方法
@Override
public void detachView() {
    mMovieListViewContract = null;
    mMovieModelContract.releaseResources();
}

我正在发布具有void返回的releaseResources方法。并进行测试以确保只能调用一次存根版本。

@Override
public void releaseResources() {
    if(mSubscription != null && !mSubscription.isUnsubscribed()) {
        mSubscription.unsubscribe();
    }
}

我写了以下测试:

@Test
public void shouldReleaseModelResourcesWhenDetached() {
   doNothing().when(mockMovieListModelContract).releaseResources();

   movieListPresenterContract.detachView();

   verify(mockMovieListModelContract, times(1)).releaseResources();
}

我想验证mockMovieListModelContract.releaseResources()的存根版本只被调用一次。 以下测试未通过:

verify(mockMovieListModelContract, times(1)).releaseResources();

测试失败了:

Wanted but not invoked:
movieListModelContract.releaseResources();
Actually, there were zero interactions with this mock.

所以我改为使用通过测试的verifyZeroInteractions(mockMovieListModelContract);。但是,验证只能调用一次存根版本的测试。

1 个答案:

答案 0 :(得分:2)

直截了当:模拟框架告诉你没有在该模拟对象上调用此方法。

只有两个解释:

  • 真正运行您在问题中显示的生产代码(您正在测试其他内容)
  • 您的设置有问题;并且您在进行测试设置时“插入”模拟对象