我有一个API返回Observable
's与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();
}
});
}
...
}
有更好的方法吗?
return Observable.just(new MyData());
您可以在这里找到文档。对于更复杂的mock =>创建操作符列表
您可以使用Observable.defer(() -> Observable.just(new MyData())
,或者使用PublishSubject通过它发送数据。注意,在第一种情况下必须使用。defer()运算符因为它将使用与第一次调用相同的值,否则