我无法找到一种方法来对 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/