Mockito never() not working with andThen rxjava2



我正在测试一段用 Kotlin 编写的相当简单的代码:

o1.updateUser(params)
     .andThen(o2.reload())

当更新用户失败时,我希望不会执行重新加载。但是当使用 Mockito 2 和 jUnit 5 进行测试时,会调用所述模拟。

模拟是这样完成的:

given(o1.updateUser(user)).willReturn(Completable.error(IllegalArgumentException())
given(o2.reload()).willReturn(Completable.complete())

现在的问题是代码的行为符合预期,这意味着在这种情况下,o2从未被实际调用,但是在单元测试时,Mockito声称有o1的调用。

测试断言如下所示:

verify(o2, never()).reload()

我在这里做错了什么吗?有没有办法解决这个问题?我是否以某种方式错误地理解了运算符?

你在测试中写的内容实际上是:

Completable c2 = o2.reload(); 
o1.updateUser(params).andThen(c2);

您可能想要的是:

o1.updateUser(params).andThen(Completable.defer(() -> o2.reload()));

这样,只有当 andThen 的执行正常完成并订阅延迟Completable时,才会调用o2.reload()

相关内容

  • 没有找到相关文章

最新更新