模拟RxJava Observable的正确方法是什么

时间:2016-08-12 07:50:21

标签: android testing rx-java

我有一个返回Observable的API,用于与RxJava一起使用。为了测试我想避免网络操作,所以计划模拟响应。但是,由于所有响应都必须包含Observable并且from()方法期望Future不是具体类型,因此我的模拟类使用匿名包装类进行复杂化,我认为必须有更好的办法。

这就是我所拥有的:

public class MockApi implements MyApi {

    @Override
    public Observable<MyData> getMyData() {
        return Observable.from(new Future<MyData>() {

            @Override public boolean cancel(boolean mayInterruptIfRunning) { return false; }
            @Override public boolean isCancelled() { return false; }
            @Override public boolean isDone() { return false; }

            @Override
            public MyData get(long timeout, TimeUnit unit) throws InterruptedException,
                    ExecutionException, TimeoutException {
                return get();
            }

            @Override
            public MyData get() throws InterruptedException, ExecutionException {
                return new MyData();
            }

        });
    }

    ...

}

有更好的方法吗?

2 个答案:

答案 0 :(得分:11)

return Observable.just(new MyData());

您可以找到文档here。对于更复杂的mock =&gt; list of creating operators

答案 1 :(得分:1)

您可以使用Observable.defer(() -> Observable.just(new MyData()),或使用PublishSubject通过它发送数据。注意,你必须在第一种情况下使用.defer()运算符,因为它将在第一次调用时使用相同的值,否则