Mockito从不()不使用andThen rxjava2

时间:2017-11-11 18:04:04

标签: 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()

我在这里做错了吗?有没有解决的办法?我是否错误地理解了操作员?

1 个答案:

答案 0 :(得分:2)

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

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

你可能想要的是:

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

这样,o2.reload()仅在andThen的执行正常完成并订阅延迟的Completable时才会被调用。