Android:使用协程和状态测试 ViewModel

Android: Testing ViewModel with coroutines and states

提问人:Bugs Happen 提问时间:10/17/2023 更新时间:10/17/2023 访问量:10

问:

我一直在试图了解测试在Android中是如何工作的。我有以下视图模型类:ViewModel

@HiltViewModel
class AllLaunchesViewModel @Inject constructor(
    private val allLaunchesUseCase: GetAllLaunchesUseCase
) {
    var allLaunchesToDisplay = mutableStateListOf<LaunchItemToDisplay>()
        private set

    fun loadAllLaunches() {
        viewModelScope.launch {
            allLaunchesUseCase().collect {
                allLaunchesToDisplay = it
            }
        }
    }
}

以下是我的测试功能:

class AllLaunchesViewModelTest {
    private lateinit var viewModel: AllLaunchesViewModel

    @Before
    fun setup() {
        val launchesRepo = FakeLaunchesRepo()
        viewModel = AllLaunchesViewModel(
            GetAllLaunchesUseCase(launchesRepo)
        )
        viewModel.onUserEvent(AllLaunchesUserEvent.LoadAllLaunches)
    }

    @Test
    fun `check if response parsing is working, should return true for expected array size 3`() {
        val launches = viewModel.allLaunchesToDisplay.toList()
        assertEquals(3, launches.size)
    }
}

但是我的测试一直失败,因为我的函数正在启动一个新的协程,而我的测试函数没有等待它完成。它继续检查我的列表的大小,如果它允许协程完成其工作,它将包含数据。但是由于它不等待,大小返回 0,我的测试失败。loadAllLaunches()

我怎样才能告诉这个测试等待我的viewModel中的协程完成,然后再检查列表的大小?

我已经尝试过 和 ,但他们什么也没做。TestCoroutineScopeTestCoroutineDispatcherStandardTestDispatcher

任何帮助将不胜感激。

android 单元测试 kotlin-coroutines android-viewmodel mutablestateof

评论


答: 暂无答案