我有这种测试方法
obj.rotateX(rads)
自从我致电private var testDispatcher = TestCoroutineDispatcher()
@Test
fun test__success() {
viewModel = MyActivateViewModel(
"LG_NAME",
"EXH_NAME",
"_CODE",
"C_CODE", controller)
every {
controller.activate(any(), any())
} returns true
testDispatcher
.runBlockingTest {
viewModel.onOkButtonClicked()
Truth.assertThat(viewModel.activated.value).isEqualTo(true)
}
}
fun onOkButtonClicked() {
viewModelScope.launch {
val status = activateTask()
if (status == 0) {
activated.value = true
} else {
activationFailed.value = status
}
}
}
private suspend fun activateTask(): Int {
return withContext(Dispatchers.IO) {
var status = 0
try {
controller.activate(code, code)
} catch (e: LoginException) {
status = e.reason
}
status
}
}
我希望这可以完成。但是这些行下面的断言失败了。我看到的是在执行断言行之前协程尚未完成。如果我在断言之前添加一个延迟,它将按预期工作。
我的实现方式有什么问题? 正确的方法是什么