我正在尝试为我的视图模型创建单元测试,基本上,视图模型调用存储库函数,然后返回其结果,然后视图模型将结果发送回视图,但在密封的类内。我正在使用onChanged测试视图模型,所以我们的想法是验证第一个onChanged,它必须是Loading,然后第二个必须是Photos,并且部分是因为我必须创建另一个Photo密封类,在此处插入假列表,然后使用验证,但是两个结果当然是不同的,因此类型相同。
如何测试视图状态序列?
要测试的viewmodel方法:
fun doPhotoRequest(albumId: Long) {
viewModelScope.launch {
_state.value = (PhotosViewState.Loading)
albumsRepository.getPhotos(albumId).let { response ->
if (response is Response.Success) {
_state.value = (PhotosViewState.Photos(response.data.sortedBy { it.title.length }))
} else {
val error = (response as Response.Error).exception.localizedMessage
_state.value = (PhotosViewState.Error(error))
}
}
}
}
密封班
sealed class PhotosViewState {
object Loading : PhotosViewState()
class Error(val error: String?) : PhotosViewState()
class Photos(val photos: List<Photo>) : PhotosViewState()
}
测试(只执行第一行而没有任何错误)
verify(viewState, times(1)).onChanged(PhotosViewState.Loading)
verify(viewState, times(1)).onChanged(PhotosViewState.Photos(list))