Rx Java blockingFirst / Single возвращает неправильное исключение в тесте JUnit 5 Retrofit - PullRequest
0 голосов
/ 07 февраля 2020

Ожидается, что приведенный ниже тест возвратит HttpException, но вместо этого он возвращает RuntimeException.

   @Test
    fun `Server down returns 500 error`() {

        mockWebServer.enqueue(MockResponse().setResponseCode(500))

        val exception: Exception =
            assertThrows(
                HttpException::class.java
            ) {

                githubApi
                    .getRepoList("test")
                    .blockingFirst()

            }

        assertEquals(exception, HttpException::class)

    }

Журнал для неудачного теста:

INFO: MockWebServer [54339] получил запрос: GET / users / test / repos HTTP / 1.1 и ответили: HTTP / 1.1 500 Ошибка сервера Feb 07, 2020 9:20:11 PM okhttp3.mockwebserver.MockWebServer acceptConnections ИНФОРМАЦИЯ: MockWebServer [54339] завершил прием соединений: сокет закрыт, фев 07, 2020 9 : 20: 23 PM okhttp3.mockwebserver.MockWebServer $ serveConnection $$ inlined $ execute $ 1 runOnce ИНФОРМАЦИЯ: Сбой соединения MockWebServer [54339] из /127.0.0.1: java. net .SocketException: сокет закрыт

org.opentest4j.AssertionFailedError: Создан непредвиденный тип исключения ==> ожидается: com.jakewharton.retrofit2.adapter.rxjava2.HttpException, но было: java .lang.RuntimeException

1 Ответ

2 голосов
/ 08 февраля 2020

Поскольку @akarnokd предлагает вам извлечь причину.

assertEquals(exception.cause, HttpException::class)

в качестве альтернативы вы также можете проверить это без blockingFirst, например:

githubApi
    .getRepoList("test")
    .test()
    .assertError(HttpException::class)
...