【发布时间】:2020-02-07 18:25:37
【问题描述】:
下面的测试预计会返回 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.1 500 服务器错误 2020 年 2 月 7 日 9:20:11 PM okhttp3.mockwebserver.MockWebServer 接受连接信息: MockWebServer[54339] 已完成接受连接:套接字已于 2 月 7 日关闭, 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.retrofit2.adapter.rxjava2.HttpException 但是: java.lang.RuntimeException
【问题讨论】:
-
blockingFirst将检查的异常包装到RuntimeException中,因此您必须提取原始异常作为其原因。 -
@akarnokd 非常感谢。您也可以将其发布为答案,以便我接受并投票吗?如果问题不大,您可以发布如何从原始异常中提取它吗?
标签: android rx-java2 junit5 mockwebserver