2017-11-11 180 views
0

我正在测试一个相当简单的一件写在科特林代码:永远的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() 

难道我做错了吗?有没有解决的办法?我以某种方式不正确地理解操作员?

回答

2

您在测试中所写的其实是:

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

什么你可能想的是:

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

这样一来,如果andThen执行正常完成并订阅o2.reload()仅获取被称为推迟Completable

相关问题