unit-testing - 如何使用代表视图状态的密封类测试视图模型?
问题描述
我正在尝试为我的视图模型创建单元测试,基本上视图模型调用存储库函数然后返回其结果,然后视图模型将结果发送回视图但在密封类中。我正在使用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))
解决方案
推荐阅读
- r - 参数脆弱模型:R“parfm”包和Stata之间的不同结果
- asp.net-web-api - 使用自签名证书连接到服务器
- azure - Azure Key Vault 安全性(管理员问题)
- flutter - 如何在 Flutter 服务器端读取文件
- java - Telegram Bot 中的 ExceptionInInitializerError
- amazon-redshift - 丢弃程序给出错误 - 红移和一般问题
- python - 将重复条目转换为字典:Python
- javascript - 使用 php/javascript 或 jquery 提交 form2 时阻止其他 form1 提交
- html - Div 容器不响应 CSS 代码/命令
- html - 如何从我的链接中删除这个蓝色背景