Код ниже не работает при работе в среде JUnit. Но он падает при запуске приложения. Я вижу журналы ошибок в консоли, но тесты отмечены как переданные.RxJava2 с JUnit: исключений, исключенных в тестах
@Test
public void test() {
Observable observable = Observable.error(new RuntimeException());
observable.subscribe();
}
Итак, вопрос в том, как это произошло в JUnit. Потому что да, если что-то не работает в приложении, это хорошо, если он также не работает в модульных тестах :)
И в этом примере у меня есть прямой доступ к наблюдаемому. Но в моих реальных тестах у меня этого нет. Реальные наблюдаемые - это только внутренние детали тестируемых классов. Самое главное, что я могу сделать, это добавить планировщиков или что-то еще.
Итак, как сделать так, чтобы он не имел прямого доступа к наблюдаемому?
Кроме того, я только что проверил этот код не врезаться либо:
@Test
public void test() {
Observable observable = Observable.error(new RuntimeException());
observable.subscribe(new Consumer() {
@Override
public void accept(Object o) throws Exception {
throw new RuntimeException();
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
throw new RuntimeException();
}
});
}
Такие порядки больше не бросать синхронно в 2.x, но в конечном итоге в обработчике плагинов на наличие ошибок. По умолчанию обработчик печатает стек, поэтому вы видите ошибки, напечатанные на консоли, но не сбой при тестировании. В противном случае распространяются только фатальные исключения, такие как StackOverflowError. – akarnokd
@akarnokd Спасибо, это интересно, тогда это RxJava2. Есть ли способ обнаружить такие ошибки и сделать тесты неудачными? –
Вы должны разработать для этого. Также вы не должны бросать потребителя, и, если это возможно, используйте собственный пробный код вокруг проблемного кода внутри пользовательского onNext или лямбда. – akarnokd