【发布时间】:2021-11-01 08:31:24
【问题描述】:
您好,我正在尝试测试我的视图模型中的 livedata,我已编写测试以验证是否已进行存储库调用
在这种情况下如何检查实时数据对象,以及我应该在 viewModel 中为这段代码编写哪些额外的测试用例
谢谢 回复
MainActivityViewModel
class MainActivityViewModel @Inject constructor(
private val dataRepository: DataRepository
): ViewModel() {
val _charactersLiveData = MutableLiveData<Result<ArrayList<Character>>>()
val charactersLiveData: LiveData<Result<ArrayList<Character>>> = _charactersLiveData
fun fetchCharacters() {
viewModelScope.launch {
_charactersLiveData.value = dataRepository.getCharacters()
}
}
}
MainActivityViewModelTest
@RunWith(MockitoJUnitRunner::class)
class MainActivityViewModelTest {
@get:Rule
val coroutineRule = MainCoroutineRule()
@Mock
private lateinit var dataRepository: DataRepository
@InjectMocks
private lateinit var mainActivityViewModel: MainActivityViewModel
@Test
fun fetchCharacters() {
runBlockingTest {
mainActivityViewModel.fetchCharacters()
verify(dataRepository).getCharacters()
}
}
}
【问题讨论】:
-
如果 LiveData 引用了存储库,那么我将验证模拟中的函数是否被调用,您已经完成了。需要注意的一点是 ViewModel 应该将 Dispatcher 注入到构造函数中,这样您就可以在测试中使用 Main.Dispatcher 以便结果同步返回。
-
你能分享一个这样的例子吗
-
这个免费课程有一个专门用于测试的广泛部分。它还展示了如何测试
LiveData:udacity.com/course/advanced-android-with-kotlin--ud940
标签: android unit-testing kotlin mvvm android-viewmodel