Android 当在 AndroidSchedulers.mainThread() 上观察到 Observable 时,JUnit 测试无限期阻塞

Android JUnit test blocks indefinitely when Observable observed on 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)
}

.observeOn(AndroidSchedulers.mainThread()) 存在时,测试会在 returnedObservable.toBlocking().first() 上无限期阻塞。

有没有办法将可观察值转换为 return 结果?

returnedObservable 从方法调用中 return 编辑,并且已经应用​​了 .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())