Написание тестовых случаев для ViewModel.
В котором viewmodel выполняет операцию с использованием репо, содержащего источник данных.
Ошибка возникает в mDataSource.getWorks (обратный вызов)
ViewModel:
mObsIsShowProgress.value = true
mRepo!!.getWorks(object :DataSource.WorksListCallback {
override fun onWorksListReceived(works: List<Work>) {
mObsWorksList.value = works;
mObsIsShowProgress.value = false
}
override fun onFailure(error_code: Int, reason: String) {
mObsIsShowProgress.value = false
}
})
Репо:
class Repo(dataSource: RetrofitDataSource):DataSource {
var mDataSource: RetrofitDataSource = dataSource
override fun getWorks(callback: DataSource.WorksListCallback) {
mDataSource.getWorks(callback)
}
}
ViewModelTest:
Этот тест предназначен для проверки работ загружены или нет.
// Executes each task synchronously using Architecture Components.
@get:Rule
var instantExecutorRule = InstantTaskExecutorRule()
@Mock
private lateinit var worksRepostiory: Repo
@Mock private lateinit var context: Application
@Captor
private lateinit var loadWorkCallbackCaptor: ArgumentCaptor<DataSource.WorkListCallback>
private lateinit var worksViewModel:ViewModel
private lateinit var worksList: List<Work>
@Test
fun loadWorksFromRepository_dataLoaded(){
// When loading of works is requested
worksViewModel.getWorks()
// Callback is captured and invoked with stubbed works
verify<Repo>(worksRepostiory).getWorks(capture(loadWorkCallbackCaptor))
// Then progress indicator is shown
assertTrue(LiveDataTestUtil.getValue(ViewModel.mObsIsShowProgress))
loadWorkCallbackCaptor.value.onWorksListReceived(worksList)
}