Код: Выделить всё
@Test
fun `test`() {
every { Util.fetchLocation()} returns Single.error(Exception())
val resultErrors = testableClass.testableFun().test().errors()
Assert.assertTrue(resultErrors.size == 1)
Assert.assertTrue(resultErrors.firstOrNull() is Exception)
}
Проблема в том, что внутри этого класса мне пришлось сопоставить RxJava Single с приостановкой развлечения, а после этого приостановить развлечение to Single примерно так:
Код: Выделить всё
private suspend fun getString(): String{
return "string"
}
private fun getIntAsSingle(): Single {
return Single.just(2)
}
private suspend fun mapSingleToSuspend(){
getIntAsSingle().await()
}
private suspend fun awesomeMethod(): String{
return getString() + mapSingleToSuspend().toString()
}
private fun mapSuspendToSingle(): Single{
return rxSingle {
awesomeMethod()
}
}
Другого способа сделать это нет, потому что мне приходится использовать результат первой приостановки развлечения с результатом первого Single, и после этого возвращаемое значение должно быть Single
Я думаю, проблема связана с методом ожидания RxJava, потому что, когда я попробовал отладить тест, тест результат сработал раньше, чем была вызвана функция, содержащая метод await().
Внутри тестового класса я использовал это в методе setUp() для RxJava, но это не помогло :
Код: Выделить всё
RxAndroidPlugins.setMainThreadSchedulerHandler { Schedulers.trampoline() }
RxJavaPlugins.setIoSchedulerHandler { Schedulers.trampoline() }
Подробнее здесь: https://stackoverflow.com/questions/773 ... uspend-fun