mockito-core:2.7.10


我正在使用Mockito测试以下方法

@Override
public void detachView() {
    mMovieListViewContract = null;
    mMovieModelContract.releaseResources();
}


我存根了具有无效返回值的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);。但是,验证存根版本仅被调用一次的测试。

最佳答案

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

对此只有两种解释:


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

07-27 16:41