2015-07-15 4 views
0

Я пытаюсь написать модульные тесты для своих вызовов RX Observable в Android. Я настраиваю мой Дооснащаемый RestAdapter так:Перехватчик OkHttp не вызван из Observable

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

Однако, ни один из моих наблюдаемых вызовов не становится перехвачен. На самом деле, кажется, что сетевые вызовы не срабатывают ВСЕ. Кто-нибудь сталкивается с подобной проблемой?

EDIT: Вот как я называю Наблюдаемый от моего модульного тестирования

TestSubscriber<User> testSubscriber = new TestSubscriber<>(); 
    mLoginUtils.doEmailLogin("customer", new AuthCredentials("[email protected]", "testpassword")).subscribe(testSubscriber); 
+0

же ошибка при использовании Дооснащения 1.8, но она хорошо работает при использовании переоснащения 1.9+ – David

ответ

4

Вы должны подписаться на Observable, в противном случае он не будет срабатывать до.

Видимо, эта модификация реализуется как «холодные наблюдаемые».

От ReactiveX docs

«холодный» Наблюдаемое, с другой стороны, не ждет, пока наблюдатель присоединяется к ней, прежде чем она начинает излучать элементы, и так такой наблюдатель гарантированно увидеть целую последовательность с самого начала.

+0

Я подписываюсь так: 'doEmailLogin («клиент», новые AuthCredentials («[email protected]», «testpassword»)). subscribe (testSubscriber); ' –

+0

Пожалуйста, разместите все соответствующие коды. –

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

Спасибо, но основная проблема заключается в том, что мои сетевые вызовы не проходят на моих модульных тестах (на основе jvm). Вот почему я был обеспокоен тем, что Interceptor не уволился, поскольку это свидетельствовало о моем симптоме. –