提问人:Bugs Happen 提问时间:10/17/2023 更新时间:10/17/2023 访问量:10
Android:使用协程和状态测试 ViewModel
Android: Testing ViewModel with coroutines and states
问:
我一直在试图了解测试在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中的协程完成,然后再检查列表的大小?
我已经尝试过 和 ,但他们什么也没做。TestCoroutineScope
TestCoroutineDispatcher
StandardTestDispatcher
任何帮助将不胜感激。
答: 暂无答案
评论