java - 单元测试 RxJava onComplete、onNext 和 onError

标签 java android unit-testing kotlin rx-java

我无法找到一种方法来对 android 中的 RxJava 的 onComplete、onNext 和 onError 情况进行单元测试。

TestSubscriber 似乎解决了这个问题,但作为 RXJava 的新手,我仍然没有找到如何做到这一点。

MyApi.method()
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(object : Observer<SettleCodeResponse> {
        override fun onCompleted() {
        }

        override fun onError(e: Throwable) {
            view.hideProgress()
            Logger.logError(TAG, e.message)
        }

        override fun onNext(response: SettleCodeResponse) {
            view.hideProgress()
            process(response)
        }
    })

最佳答案

我不确定 Mocking static 类,但你可以尝试这种方式吗?

首先,您必须模拟 MyApi

任何类(class)

class Foo(private val view: SomeView, private val myApi: MyApi) {
    fun doSomething() {
        myApi.method().subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(object : Observer<SettleCodeResponse> {
                override fun onCompleted() {}

                override fun onError(e: Throwable) {
                    view.hideProgress()
                    Logger.logError(TAG, e.message)
                }

                override fun onNext(response: SettleCodeResponse) {
                    view.hideProgress()
                    process(response)
                }
            })
    }
}

在你的测试中

lateinit var myApi: MyApi
lateinit var view: SomeView
lateinit var foo: Foo

@Before
fun setup() {
    RxAndroidPlugins.setInitMainThreadSchedulerHandler({ Schedulers.trampoline() })
    MockitoAnnotations.initMocks(this)
    myApi = mock(MyApi:class.java)
    view = mock(SomeView::class.java)
    foo = Foo(view, myApi)
}

@Test
fun testOnNext() {
    given(myApi.method()).willReturn(SettleCodeResponse())
    foo.doSomething()
    verify(view).hideProgress()
}

关于java - 单元测试 RxJava onComplete、onNext 和 onError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57520077/

相关文章:

java webstart 反编译器

java - 如何让计时器在后台运行以在一定时间后执行操作?

python - 在 python 中组合断言

java - 使用子类测试抽象类中的具体方法

java - 无法打开 JPA 实体管理器

java - 创建用于屏幕传输 RTSP 的处理器

java - Spring 3.1 Controller 不接受 ajax post

android - 我们可以在 Android 中将 ListView 添加到 RemoteView 吗?

android - 使用 Android 将图像发送到 MySQL 数据库

c# - Rhino 使用 FakeItEasy 模拟 'Expect'