测试应该返回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)
}
测试失败的日志为
信息:模拟网络服务器[54339]收到的请求:GET/users/test/repos HTTP/1.1 并响应: HTTP/1.1 500 服务器错误 Feb 07, 2020 9:20:11 PM okhttp3.mockwebserver.MockWebServer acceptConnections INFO: 模拟网络服务器[54339] 完成接受连接: 套接字已关闭 2 月 7 日, 2020 9:20:11 下午 okhttp3.mockwebserver.MockWebServer$serveConnection$$inlined$execute$1 runOnce 信息:来自/127.0.0.1 的模拟网络服务器[54339] 连接失败: java.net.SocketException: Socket closed
org.opentest4j.AssertionFailedError:引发意外的异常类型 ==> 预期: com.jakewharton.retrofit2.adapter.rxjava2.HttpException 但是: java.lang.RuntimeException
> 正如@akarnokd所建议的那样,您需要提取原因。
assertEquals(exception.cause, HttpException::class)
或者,您也可以在没有像这样blockingFirst
的情况下对此进行测试:
githubApi
.getRepoList("test")
.test()
.assertError(HttpException::class)