Тест Android JUnit блокируется на неопределенный срок, когда Observable наблюдается в AndroidSchedulers.mainThread()

Я пишу простой тест, который эквивалентен:

Test fun testObservable() {
    val returnedObservable = Observable.create(object : Observable.OnSubscribe<String> {
        override fun call(t: Subscriber<in String>) {
            t.onNext("hello")
            t.onCompleted()
        }

    }).subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())

    val result = returnedObservable.toBlocking().first()
    assertEquals("hello", result)
}

Тест блокируется на неопределенное время на returnedObservable.toBlocking().first(), когда присутствует .observeOn(AndroidSchedulers.mainThread()).

Есть ли способ преобразовать наблюдаемое, чтобы вернуть результат?

returnedObservable возвращается из вызова метода с уже примененными .subscribeOn и .observeOn, поэтому их удаление невозможно.


person atok    schedule 07.08.2015    source источник


Ответы (1)


Я предполагаю, что это ошибка, упомянутая здесь: https://github.com/ReactiveX/RxAndroid/issues/ 50

Кстати, почему бы вам не использовать RxKotlin?

Ваш пример будет выглядеть намного лучше:

    val returnedObservable = observable<String> { subscriber ->
        subscriber.onNext("hello")
        subscriber.onCompleted()
    }
    .subscribeOn(Schedules.io())
    .observeOn(AndroidSchedulers.mainThread())
person Sergey Mashkov    schedule 07.08.2015
comment
Я стремлюсь уменьшить количество зависимостей, необходимых для ответа на мой вопрос, т.е. сделать его понятным для программистов, не использующих kotlin. - person atok; 07.08.2015