Как сделать тестовый код для HTTP 204 Нет контента в Android, Rx - PullRequest
0 голосов
/ 27 ноября 2018

Я занимаюсь разработкой приложения для Android с использованием Kotlin, RxJava и Retrofit.

Я отправляю запрос на удаление ресурса.

HTTP - DELETE

Иответ 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}")
                }
            })
}

Я хочу проверить эту функцию докладчика.

Ниже приведен мой тестовый код:

@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 Ответ

0 голосов
/ 27 ноября 2018

Я предлагаю вам использовать Completable вместо Observable для ответов "204 нет содержимого", поскольку в этих ответах нет никакого содержимого, а нам просто нужны методы onComplete и onError.так что вы можете создать Completable и вызвать onComplete метод в тесте.

...