unit-testing - Mockito never() 不与 andThen rxjava2 一起使用

标签 unit-testing junit kotlin mockito rx-java2

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

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

当 updateUser 失败时,我预计不会执行重新加载。但是当使用 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()

关于unit-testing - Mockito never() 不与 andThen rxjava2 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47241146/

相关文章:

java - spring - @ContextConfiguration 无法在 src/test/resources 中加载配置文件

Ruby:如何使用单个命令运行文件夹中的所有单元测试?

unit-testing - 我必须为 SpringMVC3.2 单元测试导入什么?

java - 如何在 Spring Boot 中为 if else 条件编写 JUnit 测试用例

java - 如何显示使用 JUnit 运行的 Spring Test MVC 测试的完整堆栈跟踪

android - 将数据从 Angular6 微应用程序传递到移动应用程序

list - 在 kotlin 中使用哪个函数来复制列表

swift - 在 Kotlin 中适本地转换类方法

unit-testing - 使用新的测试库在dart中设置单元测试的最佳方法是什么?

unit-testing - 如何使用 with-redefs 模拟对同一函数的多次调用?