Android 单元测试协程信道返回
我每隔几秒钟进行一次轮询,并返回一个带有结果的频道。我的问题是如何测试它 以下是我的viewmodel代码:Android 单元测试协程信道返回,android,unit-testing,coroutine,kotlin-coroutines,Android,Unit Testing,Coroutine,Kotlin Coroutines,我每隔几秒钟进行一次轮询,并返回一个带有结果的频道。我的问题是如何测试它 以下是我的viewmodel代码: @ExperimentalCoroutinesApi fun fetchInfo() { viewModelScope.launch { channel = fetchInfoUseCase("1") channel.consumeEach { viewAction.postValue(ViewAction.UPDATE)
@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
}
}
@experimentalRoutinesAPI
类MyViewModelTest{
@获取:规则
val instantTask=InstantTaskExecutorRule()
@获取:规则
val coroutinestrule=coroutinestrule()
private val fetchInfo=mockk()
专用val通道=通道()
private val viewModel=MyViewModel(fetchInfo)
@试验
fun dispatchFunction_viewActionUpdate(){
准备工作()
viewModel.fetchInfo()
coVerify(正好=1){fetchInfo(any())}
资产质量(
viewModel.viewAction.value,
ViewAction.UPDATE
)
}
私人娱乐{
coEvery{fetchInfo(any())}返回通道
}
}
在我的测试中,viewModel.viewAction.value始终为空。
如何验证正在调用viewAction且值为viewAction.UPDATE