Pie*_*ira 29 android unit-testing kotlin mockk mockk-verify
我需要检查单元测试中是否未调用某个方法。这是我所做的一个示例测试,用于检查该方法是否被调用并且它工作得很好:
@Test
fun viewModel_selectDifferentFilter_dispatchRefreshAction() {
val selectedFilter = FilterFactory.make()
val event = GroceriesAisleFiltersUiEvent.SelectFilter(
filter = selectedFilter,
refreshListAction = mockk()
)
every { event.refreshListAction(selectedFilter) } just runs
viewModel.dispatchViewAction(event)
verify { event.refreshListAction(selectedFilter) }
}
Run Code Online (Sandbox Code Playgroud)
为此,我使用 mockk 的verify函数来检查该方法是否被调用。
有没有办法使用 检查mockk该方法是否未被调用?简而言之,我需要用此检查代替注释来完成下面的代码:
@Test
fun viewModel_selectSameFilter_notDispatchRefreshAction() {
val selectedFilter = viewModel.viewState.value.selectedFilter
val event = GroceriesAisleFiltersUiEvent.SelectFilter(
filter = selectedFilter,
refreshListAction = mockk()
)
every { event.refreshListAction(selectedFilter) } just runs
viewModel.dispatchViewAction(event)
// TODO: verify if method's not invoked
}
Run Code Online (Sandbox Code Playgroud)
Kar*_*iel 50
如果你想验证你的方法没有被调用,你可以验证它被调用了 0 次:
verify(exactly = 0) { event.refreshListAction(any()) }
Run Code Online (Sandbox Code Playgroud)
或者,在您是模拟的情况下event.refreshListAction,您可以等效地编写以下内容来验证根本没有调用模拟:
verify { event.refreshListAction wasNot called }
Run Code Online (Sandbox Code Playgroud)
编辑
问题中的模拟本身似乎是一个函数(或带有invoke运算符函数的其他东西)会导致很多混乱。有关verify(exactly = 0)和 verify with之间的区别wasNot Called,请参阅这篇文章,其中模拟是一个简单的对象。
| 归档时间: |
|
| 查看次数: |
21550 次 |
| 最近记录: |