Ниже приведен фрагмент кода, который я пытаюсь протестировать. Код перед 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
теста не проходят. Может ли кто-нибудь помочь мне с тестированием?