我尝试使用JUnit和Mockito为以下场景创建测试:调用服务器,如果响应不成功,请重试请求。
repository.uploadModel(model)
.subscribeOn(schedulers.io())
.observeOn(schedulers.ui())
.repeatWhen (repeatTimer)
.subscribe({
if (it.isSuccessful) {
mvpView?.showUploadComplete()
} else {
mvpView?.showGeneralUploadError()
}
}, {
it.printStackTrace()
})
到目前为止,我提出了这个问题:
val model = Mockito.mock(Model::class.java)
val errorResponse = Response.error<Any>(500, ResponseBody.create(null, ""))
whenever(repository.uploadModel(model))
.thenReturn(Flowable.just(errorResponse))
presenter?.uploadModel()
testScheduler?.triggerActions()
verify(view, atLeast(5)).pendingUpload()
实际发生的事情:showGeneralUploadError()
只被调用一次,然后测试结束并失败。
我想要发生什么:多次致电showGeneralUploadError()
额外信息:
repeatTimer
定义为单元测试的{ it: Flowable<Any> -> it.delay(0, TimeUnit.SECONDS)}
repeatTimer
被定义为生产的{ it: Flowable<Any> -> it.delay(5, TimeUnit.SECONDS)}
答案 0 :(得分:2)
takeUntil()
运算符只会响应通过onNext()
发出的数据。由于您的测试永远不会发出数据值,因此无需执行任何操作。
从您的示例代码中不清楚您要完成的任务,因此我无法建议您可以采取哪些措施来解决此问题。
答案 1 :(得分:0)
问题发生在repeatTimer
。我试图将其声明为嘲笑目的:
repeatTimer is defined as { it: Flowable<Any> -> it.delay(0, TimeUnit.SECONDS)}
但它应该只是
{ it: Flowable<Any> -> it}