viewModelScope使用 Kotlin 协程为 Android 单元测试注入的最佳策略是什么?
当 CoroutineScope 被注入到 ViewModel 进行单元测试时,flowOn即使在生产代码中不需要CoroutineDispatcher 也应该注入和定义 using吗?
flowOn在此用例中,生产代码中不需要,因为 RetrofitDispatchers.IO在SomeRepository.kt 中处理线程,并在默认情况下viewModelScope返回数据Dispathers.Main。
对保存在 Kotlin Flow 值中的 Android 的 ViewModel 视图状态值运行单元测试。
带有主调度程序的模块未能初始化。对于测试,可以使用 kotlinx-coroutines-test 模块中的 Dispatchers.setMain
单元测试在 CoroutineScope 被硬编码的第一次出现时失败。viewModelScope被利用,以便启动的协程将维护 ViewModel 的生命周期。但是,它viewModelScope是从 ViewModel 内部创建的,与可以在 ViewModel 外部定义并作为参数传入的 CoroutineDispatcher 相比,这使得注入更加复杂。
SomeViewModel.kt
fun bindIntents(view: FeedView) {
view.initStateIntent().onEach {
initState(view)
}.launchIn(viewModelScope)
}
Run Code Online (Sandbox Code Playgroud)
SomeTest.kt
@ExperimentalCoroutinesApi
class SomeTest : BeforeAllCallback, AfterAllCallback {
private val testDispatcher = …Run Code Online (Sandbox Code Playgroud)