Как сделать тестовый код для HTTP 204 Нет контента в Android, Rx
Я занимаюсь разработкой приложения для Android с использованием Kotlin, RxJava и Retrofit.
Я отправляю запрос на удаление ресурса.
HTTP - УДАЛИТЬ
И ответ 204 Нет контента. Мой код модификации ниже:
@DELETE("res/{resId}")
fun deleteJob(@Path("resId") resId: String): Observable<Unit>
В этом случае я не знаю, как определить тип возвращаемого значения. Поэтому я определил "Наблюдаемый". Потому что нет тела ответа. Код ответа 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)
Кто-нибудь, помогите мне, пожалуйста?
1 ответ
Я предлагаю вам использовать Completable
вместо Observable
для ответов "204 нет содержимого", потому что эти ответы не имеют никакого содержания, и нам просто нужно onComplete
а также onError
методы. так что вы можете создать Completable
и позвонить onComplete
метод в тесте.