以下のコードは、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();
}
});
}