我正在写一个简单的测试,等效于:

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的方法调用返回的,因此不能删除它们。

最佳答案

我猜这是这里提到的错误:https://github.com/ReactiveX/RxAndroid/issues/50

顺便说一句,为什么不使用RxKotlin呢?

您的示例看起来会更好:

    val returnedObservable = observable<String> { subscriber ->
        subscriber.onNext("hello")
        subscriber.onCompleted()
    }
    .subscribeOn(Schedules.io())
    .observeOn(AndroidSchedulers.mainThread())

10-01 18:44