【发布时间】:2017-03-01 09:15:23
【问题描述】:
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);。但是,验证存根版本是否只被调用一次的测试。
【问题讨论】:
-
你能展示完整的测试方法吗? Mock and Before 和 Spy 注释用法是我最感兴趣的
-
这里显示的代码看起来不错。会不会是初始化问题?即
mockMovieListModelContract没有注入到movieListPresenterContract实例中。 -
谢谢大家,你是对的,我没有在 MovieListPresenterImp 的构造函数中注入 MovieListModelContract。我正在使用 Dagger2 依赖注入并忘记添加它。
-
仅作记录:以防我的回答在这里有所帮助;考虑在某个时候接受。或者让我知道缺少什么让它值得接受;-)