如何在Android上对RxJava Completable.error进行单元测试

3
我有一个函数,它返回一个Completable,如果另一个函数失败,则返回Completable.error(RuntimeException("message")),否则返回Completable.complete()
我试图编写一个单元测试来验证流程是否正确地到达了错误和成功的代码,但是在我的测试中,我无法使用underTest.unregisterFromService().test().assertComplete().assertNoErrors()来区分它们。
有人知道如何在单元测试中检查Completable.error()的值吗?
2个回答

5

我想你要找的是

yourCompletable
    .test()
    .assertErrorMessage("your error message")

这对我非常有帮助。 - Eduardo Fernandes

3

有一个assertError可以处理这个问题,大多数情况下使用带有Throwable类型参数的版本,如文档所述:

断言此TestObserver/TestSubscriber接收到的仅有一个onError事件是指定errorClass类的实例。

用法:

yourCompletable
    .test()
    .assertError(RuntimeException::class.java)

这里 可以找到 assertError 的三个版本。


我得到了一个 java.lang.AssertionError: No errors (latch = 0, values = 0, errors = 0, completions = 1),这就是为什么我感到困惑的原因 :( - Bootstrapper
也许你正在测试的情况并没有以RuntimeException终止?像这样的代码 Completable.error(RuntimeException("message")).test().assertError(RuntimeException::class.java),可以通过测试!如果您需要函数代码的帮助,请分享它,以便我们提供帮助。 - Ahmed Ashraf
有没有一种方法可以测试异常消息? - capt.swag
你可以使用 assertError 的谓词版本来实现这个功能: public final U assertError(Predicate<Throwable> errorPredicate) 例如在 Kotlin 中,可以这样写:assertError { it.message == expectedMessage } - Ahmed Ashraf
1
为了测试错误消息,有一个更好的API: public final U assertErrorMessage(String message) - Marc Calandro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接