我\xc2\xb4m试图找出在函数成员上测试这种类型的最简单方法,我\xc2\xb4见过更复杂的情况,例如协程 - 单元测试 viewModelScope.launch 方法,但没有\xc2\xb4t解决
\n\n\nListScreenViewModel.kt
\n
@HiltViewModel\nclass ListScreenViewModel @Inject constructor(): ViewModel() {\n\n private var _itemsNumber = mutableStateOf(0)\n\n private var _testList = mutableStateOf(listOf<String>())\n val testList = _testList\n\n fun addItem() {\n viewModelScope.launch {\n _itemsNumber.value++\n _testList.value += (\n "Item ${_itemsNumber.value}"\n )\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n\nListScreenViewModelTest.kt
\n
class ListScreenViewModelTest{\n\n private lateinit var viewModel: ListScreenViewModel\n\n @Before\n fun setup(){\n viewModel = ListScreenViewModel()\n }\n\n @Test\n fun `add an item to the list of items`(){\n val numberOfItems = viewModel.testList.value.size\n viewModel.addItem()\n …Run Code Online (Sandbox Code Playgroud) 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)