Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 单元测试协程信道返回_Android_Unit Testing_Coroutine_Kotlin Coroutines - Fatal编程技术网

Android 单元测试协程信道返回

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)

我每隔几秒钟进行一次轮询,并返回一个带有结果的频道。我的问题是如何测试它

以下是我的viewmodel代码:

@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