У меня 2 метода в методе, например:
completable1.doSomething()
.andThen(completable2.doSomethingElse())
И я хочу проверить это, используя Mockito и возвращая ошибку в первом завершаемом файле. Вот мой оригинальный метод:
public Completable updateQuestion(Question question){
return gameRepositoryType.updateQuestion(question)
.andThen(gameRepositoryType.getGameById(question.getqId())
.map(GAME_MAPPER)
.flatMapCompletable(gameRepositoryType::updateGame))
.observeOn(AndroidSchedulers.mainThread());
}
А вот и мой тест:
@Test
public void updateQuestionError(){
when(gameRepositoryType.updateQuestion(question)).thenReturn(Completable.error(error));
when(question.getqId()).thenReturn(FAKE_QID);
when(gameRepositoryType.getGameById(FAKE_QID)).thenReturn(Single.just(game));
when(gameRepositoryType.updateGame(game)).thenReturn(Completable.complete());
interactor.updateQuestion(question)
.test()
.assertNotComplete()
.assertError(error);
verify(gameRepositoryType).updateQuestion(question); //this is called in test
verify(question,never()).getqId(); //this is called in test
verify(gameRepositoryType,never()).getGameById(FAKE_QID); //this is called in test
verify(gameRepositoryType,never()).updateGame(game); //this is NEVER called in test
}
В моих проверках в конце метода тестирования я ожидаю, что после того, как первый завершаемый файл выдаст ошибку, 3 последние проверки должны выполняться с успехом, то есть 3 последние verify()
никогда не должны вызываться.
Однако я вижу, что все методы вызываются, хотя gameRepositoryType.updateQuestion(question)
выдает ошибку. Почему это?
Разве нельзя andThen()
никогда не вызываться, если первая завершаемая ошибка выдает?