我有一个返回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();
}
});
}
...
}
有更好的方法吗?
答案 0 :(得分:11)
return Observable.just(new MyData());
您可以找到文档here。对于更复杂的mock =&gt; list of creating operators
答案 1 :(得分:1)
您可以使用Observable.defer(() -> Observable.just(new MyData())
,或使用PublishSubject通过它发送数据。注意,你必须在第一种情况下使用.defer()运算符,因为它将在第一次调用时使用相同的值,否则