我无法找到一种方法来对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)
}
})
答案 0 :(得分:0)
我不确定模拟static
类,但是您可以尝试这种方式吗。
首先,您必须模拟MyApi
。
在任何班上
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()
}
答案 1 :(得分:0)
首先,您需要模拟const rows = `100|Description 1|a|
101|Description 2|a|
102|Description 3|b|`.split("\n")
let list = {}
rows.forEach(row => {
(([ProductId, Description, subCat]) => (list[ProductId] = {
Description,
subCat
}))(row.split("|"))
})
console.log(list)
实例并定义myApi
的响应。
您可以根据响应使用myApi.method()
声明Rx链的不同情况。
TestObserver
您还可以测试整个流程,并查看调用了@Test
fun test() {
//mock the response of the method
when(myApi.method()).thenReturn(Observable.just(someSettleCodeResponse())
//create a test observer and subscribe
val observable: Observable<SettleCodeResponse> = myApi.method()
val observer: TestObserver<SettleCodeResponse> = TestObserver()
observable.subscribe(observer)
//test the observer behaviour
observer.assertComplete()
.assertNoErrors()
.assertValue(someSettleCodeResponse())
}
方法。为此,您需要模拟view
和myApi
。假设代码是演示者或视图模型中方法的一部分。
view