【问题标题】:Android JUnit test blocks indefinitely when Observable observed on AndroidSchedulers.mainThread()当在 AndroidSchedulers.mainThread() 上观察到 Observable 时,Android JUnit 测试会无限期阻塞
【发布时间】:2015-08-07 10:49:00
【问题描述】:

我正在写一个简单的测试,相当于:

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() 上阻塞。

有没有办法转换 observable 以返回结果?

returnedObservable 是从已应用 .subscribeOn 和 .observeOn 的方法调用返回的,因此不能选择删除它们。

【问题讨论】:

    标签: java android rx-java android-testing kotlin


    【解决方案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())
    

    【讨论】:

    • 我倾向于减少回答我的问题所需的依赖项数量,即让非 Kotlin 程序员可读。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-02
    • 2018-03-13
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多