永远的Mockito()不andThen工作rxjava2
问题描述:
我正在测试一个相当简单的一件写在科特林代码:永远的Mockito()不andThen工作rxjava2
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
执行正常完成并订阅o2.reload()
仅获取被称为推迟Completable
。