Android RxJava blockingFirst/Single在JUnit 5改造测试中返回错误异常

Android RxJava blockingFirst/Single在JUnit 5改造测试中返回错误异常,android,rx-java2,junit5,mockwebserver,Android,Rx Java2,Junit5,Mockwebserver,下面的测试应该返回HttpException,但它会返回RuntimeException @Test fun `Server down returns 500 error`() { mockWebServer.enqueue(MockResponse().setResponseCode(500)) val exception: Exception = assertThrows( HttpEx

下面的测试应该返回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)

    }
失败测试的日志为

信息:MockWebServer[54339]收到请求:GET/users/test/repos HTTP/1.1并响应:HTTP/1.1500服务器错误2020年2月7日9:20:11 PM okhttp3.mockwebserver.mockwebserver接受连接信息: MockWebServer[54339]已完成接受连接:套接字已于2007年2月关闭, 2020年9:20:11下午 okhttp3.mockwebserver.mockwebserver$serveConnection$$inlined$execute$1 runOnce信息:与/127.0.0.1的MockWebServer[54339]连接失败: java.net.SocketException:套接字已关闭

org.opentest4j.AssertionFailedError:引发意外的异常类型 ==>预期为:com.jakewharton.reformation2.adapter.rxjava2.HttpException,但为: java.lang.RuntimeException


正如@akarnokd所建议的,你需要找出原因

assertEquals(exception.cause, HttpException::class)
或者,您也可以不使用
blockingFirst
进行测试,如下所示:

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

正如@akarnokd所建议的,你需要找出原因

assertEquals(exception.cause, HttpException::class)
或者,您也可以不使用
blockingFirst
进行测试,如下所示:

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

blockingFirst
将选中的异常包装到
RuntimeException
中,因此您必须提取原始异常作为其原因。@akarnokd非常感谢您。你能不能也把它作为答案贴出来,这样我就可以接受并投票了?如果不太麻烦,您可以发布如何从原始异常中提取它吗?
blockingFirst
将选中的异常包装到
RuntimeException
中,因此您必须提取原始异常作为其原因。@akarnokd非常感谢您。你能不能也把它作为答案贴出来,这样我就可以接受并投票了?如果这不是一个很大的问题,你能发布如何从原始异常中提取它吗?我真的很喜欢这个,但我也想知道如何使用阻塞运算符来实现它。我真的很喜欢这个,但我也想知道如何使用阻塞运算符来实现它