使用TestSubscriber测试RxJava异常

时间:2017-01-16 14:27:37

标签: java junit rx-java

我正在尝试为一个函数编写测试用例,如果验证通过,则返回一些数据抛出异常

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);

    }

但测试用例在testService.create本身失败。

这里有什么问题?

由于

1 个答案:

答案 0 :(得分:2)

失败是因为在使用返回值创建Observable之前调用validate()。相反,您可以调用fromCallable(() -> validate(test))并执行validate延迟。