android - 单元测试协程通道返回
问题描述
我每隔几秒钟进行一次轮询并返回一个带有结果的通道。我的问题是如何测试它。
这是我的视图模型代码:
@ExperimentalCoroutinesApi
fun fetchInfo() {
viewModelScope.launch {
channel = fetchInfoUseCase("1")
channel.consumeEach {
viewAction.postValue(ViewAction.UPDATE)
}
}
}
我的单元测试代码:
@ExperimentalCoroutinesApi
class MyViewModelTest {
@get:Rule
val instantTask = InstantTaskExecutorRule()
@get:Rule
val coroutinesTestRule = CoroutinesTestRule()
private val fetchInfo = mockk<FetchInfoUseCase>()
private val channel = Channel<Result<MyModel, MyError>>()
private val viewModel = MyViewModel(fetchInfo)
@Test
fun dispatchFunction_viewActionUpdate() {
prepareScenario()
viewModel.fetchInfo()
coVerify(exactly = 1) { fetchInfo(any()) }
assertEquals(
viewModel.viewAction.value,
ViewAction.UPDATE
)
}
private fun prepareScenario() {
coEvery { fetchInfo(any()) } returns channel
}
}
我在我的测试中,viewModel.viewAction.value始终为空。如何验证正在调用 viewAction 并且值为ViewAction.UPDATE?
解决方案
推荐阅读
- r - 零膨胀高斯分布模型
- jhipster - jhipster 错误 403 请求中未包含有效的面包屑
- php - 我想使用 PHP 7.1.5 从 MySql 数据库中获取任何特定字段,但它不起作用
- python - 基于字典键合并列表
- c# - ASP.NET Core 在构建过程中设置托管环境
- elasticsearch - ElasticSearch 聚合获得唯一的整数数组
- jquery - 递增递减jQuery
- apache - 使用 htaccess 重定向时隐藏目标 url
- c++ - 我在哪里编写退出 C++ Windows 窗体应用程序之前执行的那部分代码
- apache-kafka - 使用 Kafka KSQL 从具有给定偏移量的特定分区中选择主题的所有事件