Так что, возможно, было руководство по этому вопросу, но ни один из тех, что я прочитал, не решил эту проблему для меня. У меня есть структура, как показано ниже, и я пытаюсь выполнить модульное тестирование, но когда я go для тестирования, я всегда терплю неудачу, заявляя, что метод репо doSomthing()
никогда не вызывался. Мое лучшее предположение, потому что я запустил новую сопрограмму в другом контексте. Как мне проверить это тогда?
Репозиторий
interface Repository {
suspend fun doSomething(): String
}
Просмотр модели
class ViewModel(val repo: Repository) {
val liveData = MutableLiveData<String>()
fun doSomething {
//Do something here
viewModelScope.launch(Dispatchers.IO) {
val data = repo.doSomething()
withContext(Dispatchers.Main) {
liveData.value = data
}
}
}
}
Просмотр модели Test
class ViewModelTest {
lateinit var viewModel: ViewModel
lateinit var repo: Repository
@Before
fun setup() {
Dispatchers.setMain(TestCoroutineDispatcher())
repo = mock<Repository>()
viewModel = ViewModel(repo)
}
@Test
fun doSomething() = runBlockingTest {
viewModel.doSomething()
viewModel.liveData.test().awaitValue().assertValue {
// assert something
}
verify(repo).doSomthing()
}
}