我的ViewModel中有一个函数,我在其中订阅了一些更新,我想编写一个测试,检查在订阅被触发后,特定的函数是否从订阅中调用。
下面是函数的外观:
fun subscribeToTablesUpdates() {
dataManager.getTablesList()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { tablesList ->
updateTablesState(tablesList)
}
}
这是我写的测试
@Test
fun subscribeToTablesListTest() {
val mockedTablesList = mockk<List<Table>()
every {
viewModel.dataManager.getTablesList()
} returns Observable.just(mockedTablesList)
viewModel.subscribeToTablesUpdates()
verify {
viewModel.updateTablesState(mockedTablesList)
}
}
问题是,我收到Assert异常没有任何其他信息,我不知道如何修复。
编辑1:subscribeToTableUpdates()
从ViewModel的init
块调用。
1条答案
按热度按时间q5iwbnjs1#
所以基本上测试本身是正确的,但是存在链接问题。由于VM的函数是从
init
块调用的,因此订阅只发生了一次,这就造成了这样一种情况:当我模拟数据服务时,观察者已经订阅了另一个服务。由于init块只调用了一次,则无法改变对该观察者的数据服务的实现。经过这一切调查之后,我成功地忘记了一件事,这件事又出现在我的脑海里:提取构造函数的每个外部依赖项,这样你就可以用它来代替测试,而不会出现这样的问题。