android - Android:使用协程测试视图模型
问题描述
我有这个测试方法
private var testDispatcher = TestCoroutineDispatcher()
@Test
fun test__success() {
viewModel = MyActivateViewModel(
"LG_NAME",
"EXH_NAME",
"_CODE",
"C_CODE", controller)
every {
controller.activate(any(), any())
} returns true
testDispatcher
.runBlockingTest {
viewModel.onOkButtonClicked()
Truth.assertThat(viewModel.activated.value).isEqualTo(true)
}
}
fun onOkButtonClicked() {
viewModelScope.launch {
val status = activateTask()
if (status == 0) {
activated.value = true
} else {
activationFailed.value = status
}
}
}
private suspend fun activateTask(): Int {
return withContext(Dispatchers.IO) {
var status = 0
try {
controller.activate(code, code)
} catch (e: LoginException) {
status = e.reason
}
status
}
}
既然我打电话给runBlockingTest {
viewModel.onOkButtonClicked()
我,我希望这会完成。但是这些行下面的断言失败了。我看到的是协程在执行断言行之前没有完成。如果我在断言之前添加延迟,它会按预期工作。
我的实现有什么问题?什么是正确的方法
解决方案
推荐阅读
- animation - 在 Flutter 动画中更新动画值的正确方法是什么?
- php - PHP 从不同的字符串格式创建日期
- oracle - 如何在oracle中指定要写入一个csv文件的最大行数?
- javascript - 获取 Geopoint 时打字稿错误,意外的“,”
- nativescript - VideoPlayer 高度适合内容/无黑条
- python - 计算线性回归线周围的置信区间
- ios - 选择为 UISegmentedControl 选择哪种情况
- c# - 扫描对象列表并比较对象值
- r - ggplot 直方图作为特定组的百分比
- excel - 如何修复此 SlicerCache 对象错误?