Mockito never () не работает с 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())); 

Таким образом, o2.reload() только, если выполнение andThen завершается нормально и подписывается на отложенный Completable .