2017-01-16 7 views
0

Я пытаюсь писать тесты для функции которые возвращают некоторые данные, если проверка проходит еще бросает исключениеТестирование RxJava исключение с TestSubscriber

private String validate(Test test) { 
    //Validation Logic which returns null or throws Exception 

    } 

    public Observable<Test> create(Test test) { 
     return Observable 
       .just(validate(test)) 
       .flatMap(x -> testRepository 
         .create(test)); 
    } 

прецедент для того же

@Test 
    public void Should_ThrowException_When_NoData() { 
     Test test = sampleTest(); 
     TestSubscriber<Test> subscriber = new TestSubscriber<>(); 
     testService 
       .create(test) 
       .subscribe(subscriber); 
     subscriber.awaitTerminalEvent(); 
     Throwable thrown = subscriber.getOnErrorEvents().get(0); 
     assertThat(thrown) 
       .isInstanceOf(CustomException.class) 
       .hasFieldOrPropertyWithValue("errorId", 102); 

    } 

Но испытаний case не работает на testService.create.

В чем проблема?

Благодаря

+0

Он не работает, потому что вы вызываете 'validate()' до того, как его возвращаемое значение используется для создания Observable. – akarnokd

+0

Хорошо, тогда как это можно исправить? –

+0

'fromCallable (() -> validate (test))' – akarnokd

ответ

2

Это терпит неудачу, потому что вы называете validate() до его возвращаемого значения используются для создания Наблюдаемого. Вместо этого вы можете позвонить fromCallable(() -> validate(test)) и получить исполнение validate отложенных.