2015-06-07 8 views
1

Я стараюсь научиться правильно тестировать свои приложения для Android. Теперь я обычно использую следующую структуру:Модернизация, обратные вызовы?

  • Модель
  • дооснащения (позволяя ему обрабатывать резьбу с помощью обратных вызовов)
  • Обертки для модернизации требует, публикующие события успеха и неудач быть подобраны предъявителями ,
  • Ведущие.
  • Просмотров.

Я тестировал приложения раньше, чем сам обрабатывал потоки. В этом случае я понятия не имею, как проверить, действительно ли моя обертка вызывает методы публикации событий, потому что эти методы вызываются при обратных вызовах. Что я могу сделать для решения этой проблемы?

Единственное решение, которое я могу придумать, не использует обратные вызовы, но они так удобны. Разве это не шаг назад, чтобы обрабатывать вещи сам ради тестирования?

Я могу только догадываться, что мои способы архивирования это плохо для тестирования.

EDIT: Этот вопрос предполагает, что это хорошая идея, чтобы разделить тестирование как:

1.- Проверьте, что ваш процесс асинхронного представлен должным образом. Вы можете высмеять объект, который принимает ваши асинхронные запросы, и убедитесь, что отправленное задание имеет правильные свойства и т. Д. 2.- Проверьте, что ваши асинхронные обратные вызовы делают правильные действия. Здесь вы можете высмеять первоначально поданное задание и предположить, что оно правильно инициализировано и убедитесь, что ваши обратные вызовы верны.

Но как я могу проверить первую часть без издевательства над сервисом Retrofit (потому что никогда не следует издеваться над сторонним кодом)?

+0

Возможно, вы захотите взглянуть на Observables with The Retrofit, они также очень удобны, и их намного легче проверить. – Egor

ответ

1

Попробуйте использовать Rx с доработкой. Это делает синхронные запросы Rx Asynchronous, избегая при этом необходимости обратных вызовов. Более того, вы получаете идеальные обратные вызовы из механизма Rx, которые помогут вам правильно протестировать.

Посмотрите на RxJava with Retrofit

+0

Было бы плохо продолжать использовать шину событий при работе с RxJava? – Eddnav

+0

С вашего вопроса я понимаю, что вы используете шину событий для публикации результатов успешных событий и сбоев. Поскольку Rx уже предоставляет вам обратные вызовы для завершения, новую точку данных или появление ошибок, я бы рекомендовал вам использовать эти обратные вызовы вместо шины событий. – prats110892

+0

Это не объясняет, как писать модульные тесты для переоснащения Observables. –

1

RETROFIT асинхронных обратных вызовов может быть проверена путем создания адаптера с синхронным исполнителем.

В фабрике адаптера я использую метод ниже, чтобы создать адаптер для доработки с помощью Robolectric и WireMock. WireMock действует как сервер на базеURL и возвращает ответы на запросы в REST API через Retrofit.

public static RestAdapter synchronousAdapter(Context context, String baseUrl) { 
    RestAdapter.Builder builder = initiateBuilder(context); 
    builder.setEndpoint(baseUrl); 
    Executor synchronous = new SynchronousExecutor(); 
    builder.setExecutors(synchronous, synchronous); 
    return builder.build(); 
} 

private static final class SynchronousExecutor implements Executor { 
    @Override public void execute(Runnable r) { 
     r.run(); 
    } 
} 
Смежные вопросы