Android RxJava blockingFirst/Single在JUnit 5改造测试中返回错误异常
下面的测试应该返回HttpException,但它会返回RuntimeExceptionAndroid 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
@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非常感谢您。你能不能也把它作为答案贴出来,这样我就可以接受并投票了?如果这不是一个很大的问题,你能发布如何从原始异常中提取它吗?我真的很喜欢这个,但我也想知道如何使用阻塞运算符来实现它。我真的很喜欢这个,但我也想知道如何使用阻塞运算符来实现它