Mockito never() 不使用 andThen rxjava2
Mockito never() not working with andThen rxjava2
我正在测试用 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()));
这样,o2.reload()
只有在 andThen
的执行正常完成并订阅延迟的 Completable
时才会被调用。
我正在测试用 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()));
这样,o2.reload()
只有在 andThen
的执行正常完成并订阅延迟的 Completable
时才会被调用。