首页 文章

Mockito从不()不使用和然后rxjava2

提问于
浏览
1

我正在测试一个用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 回答

  • 2

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

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

    你可能想要的是:

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

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

相关问题