【发布时间】:2018-09-16 18:10:44
【问题描述】:
下面是我尝试进行单元测试的一段代码。 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 测试失败。谁能帮我测试一下?
【问题讨论】:
标签: android unit-testing kotlin coroutine kotlinx.coroutines