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())
我正在编写一个简单的测试,相当于:
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())