如何为 HTTP 204 No Content in Android, Rx 制作测试代码
How to make test code for HTTP 204 No Content in Android, Rx
我正在使用 Kotlin、RxJava 和 Retrofit 开发 android 应用程序。
我正在发送删除资源的请求。
HTTP - 删除
响应是 204 No Content。
我的改装代码如下:
@DELETE("res/{resId}")
fun deleteJob(@Path("resId") resId: String): Observable<Unit>
在这种情况下,我不知道如何定义 return 类型。
所以我定义了"Observable"。
因为没有响应体。
响应代码为 204.
下面是我的演示者代码:
override fun deleteRes(resId: String) {
restService.deleteRes(resId)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
// here is not called
}, {
// Always here is called, because the response is 204.
if (it is NoContentException) { // I defined new exception.
view.removeRes(resId)
} else {
Log.e(TAG, "deleteRes - failed: ${it.message}")
}
})
}
我想测试一下Presenter这个功能
下面是我的测试代码:
@Test
fun deleteResTest() {
val deleteResId = "delete_res_id"
Mockito.`when`(mockRestService.deleteRes(deleteResId)).thenReturn(Observable.just(Unit))
mockRestService.deleteRes(deleteResId)
.toFlowable(BackpressureStrategy.BUFFER)
.subscribe(TestSubscriber.create<Unit>())
mJobsPresenter.deleteRes(deleteResId)
Mockito.verify(mockView).removeRes(deleteResId)
}
但是当我运行这个测试代码时,它失败了:
Wanted but not invoked:
view.removeRes("delete_res_id");
-> at com.RessPresenterTest.deleteResTest(ResPresenterTest.kt:95)
Actually, there were zero interactions with this mock.
Wanted but not invoked:
view.removeRes("delete_res_id");
-> at com.RessPresenterTest.deleteResTest(ResPresenterTest.kt:95)
Actually, there were zero interactions with this mock.
at com.RessPresenterTest.deleteResTest(ResPresenterTest.kt:95)
有人帮帮我吗?
我建议您使用 Completable
而不是 Observable
作为“204 无内容”的回复,因为这些回复没有任何内容,我们只需要 onComplete
和 onError
方法。所以你可以创建一个 Completable
并在测试中调用 onComplete
方法。
我正在使用 Kotlin、RxJava 和 Retrofit 开发 android 应用程序。
我正在发送删除资源的请求。
HTTP - 删除
响应是 204 No Content。 我的改装代码如下:
@DELETE("res/{resId}")
fun deleteJob(@Path("resId") resId: String): Observable<Unit>
在这种情况下,我不知道如何定义 return 类型。 所以我定义了"Observable"。 因为没有响应体。 响应代码为 204.
下面是我的演示者代码:
override fun deleteRes(resId: String) {
restService.deleteRes(resId)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
// here is not called
}, {
// Always here is called, because the response is 204.
if (it is NoContentException) { // I defined new exception.
view.removeRes(resId)
} else {
Log.e(TAG, "deleteRes - failed: ${it.message}")
}
})
}
我想测试一下Presenter这个功能
下面是我的测试代码:
@Test
fun deleteResTest() {
val deleteResId = "delete_res_id"
Mockito.`when`(mockRestService.deleteRes(deleteResId)).thenReturn(Observable.just(Unit))
mockRestService.deleteRes(deleteResId)
.toFlowable(BackpressureStrategy.BUFFER)
.subscribe(TestSubscriber.create<Unit>())
mJobsPresenter.deleteRes(deleteResId)
Mockito.verify(mockView).removeRes(deleteResId)
}
但是当我运行这个测试代码时,它失败了:
Wanted but not invoked:
view.removeRes("delete_res_id");
-> at com.RessPresenterTest.deleteResTest(ResPresenterTest.kt:95)
Actually, there were zero interactions with this mock.
Wanted but not invoked:
view.removeRes("delete_res_id");
-> at com.RessPresenterTest.deleteResTest(ResPresenterTest.kt:95)
Actually, there were zero interactions with this mock.
at com.RessPresenterTest.deleteResTest(ResPresenterTest.kt:95)
有人帮帮我吗?
我建议您使用 Completable
而不是 Observable
作为“204 无内容”的回复,因为这些回复没有任何内容,我们只需要 onComplete
和 onError
方法。所以你可以创建一个 Completable
并在测试中调用 onComplete
方法。