我正在尝试为Android中的RX Observable调用编写单元测试。我正在设置我的Retrofit RestAdapter:
RestAdapter.Builder restAdapter = new RestAdapter.Builder();
restAdapter
.setEndpoint(BuildConfig.API_URL)
.setConverter(new GsonConverter(getGson()))
.setClient(new OkClient(getHttpClient()));
我正在传递一个像这样的OkHttpClient:
OkHttpClient client = new OkHttpClient();
client.interceptors().add(new AuthenticationInterceptor());
但是,我的Observable调用都没有被截获。事实上,似乎网络呼叫不会启动AT ALL。有人遇到过类似的问题吗?
编辑: 以下是我从单元测试中调用Observable的方法
TestSubscriber<User> testSubscriber = new TestSubscriber<>();
mLoginUtils.doEmailLogin("customer", new AuthCredentials("test@mail.com", "testpassword")).subscribe(testSubscriber);
答案 0 :(得分:4)
您需要订阅Observable,否则不会被激活。
显然Retrofit将其实现为“冷可观察性”。
另一方面,“冷”观察者等待观察者 在它开始发出项目之前订阅它,所以这样 观察者保证从一开始就看到整个序列。
答案 1 :(得分:1)
我不确定为什么你的OkHttp拦截器没有被调用。我一直使用Retrofit请求拦截器。如果您只是想添加一个适合您的身份验证标头。以下是基于代码的示例:
// Create the OkHttp client
OkHttpClient okHttpClient = new OkHttpClient();
SSLContext sslContext;
try {
sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, null, null);
} catch (GeneralSecurityException e) {
throw new AssertionError(); // The system has no TLS. Just give up.
}
Client client = okHttpClient.setSslSocketFactory(sslContext.getSocketFactory());
// Create the Retrofit RestAdapter
RestAdapter.LogLevel logLevel = BuildConfig.DEBUG ? RestAdapter.LogLevel.FULL : RestAdapter.LogLevel.NONE;
return new RestAdapter.Builder()
.setEndpoint(BuildConfig.API_URL)
.setClient(client)
.setConverter(new GsonConverter(getGson()))
.setRequestInterceptor(new RetrofitAuthenticationInterceptor())
.setLogLevel(logLevel)
.build()
.create(ApiServiceV1.class);