下面是我尝试进行单元测试的一段代码。第一个挂起函数之前async(CommonPool)
的代码是可测试的,但在那之后,测试继续失败。我尝试使用runBlocking
但无论如何都无法测试嵌套的暂停异步函数。
interface Listener {
fun onLoading(user: User?)
fun onSuccess(user: User)
}
execute(listener: Listener) {
listener.onLoading(null)
val service = UserService.getInstance(context, "someurl")
val database = UserDatabase.getInstance(context)
launch(UI) {
val user = async(CommonPool) {
userDatabase.getUser()
}.await()
listener.onLoading(user)
val response = service.getUsersSelf(oauthToken).await()
async(CommonPool) {database.saveUser(userResponse.data.user)}.await()
val user = async(CommonPool) {database.getUser()}.await()
listener.onSuccess(user)
}
}
下面是我的单元测试,我正在使用 mockito 来模拟我的听众并检查交互的数量。
@Test
fun execute() {
runBlocking {
userDatabase.saveUser(user)
val listener = mock(GetUser.Listener::class.java)
getUser.execute(listener)
verify(listener, times(1)).onLoading(null) // Success
verify(listener, times(1)).onLoading(user) // Fails
verify(listener, times(1)).onSuccess(user) // Fails
}
}
但是最后两个verify
测试失败了。任何人都可以帮助我进行测试吗?