Mockito从来没有()不工作,然后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())); 

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