Тестирование модуля Android MVP – должен ли я высмеять шину событий?

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

В моей архитектуре это делается следующим образом:

  1. Действие пользователя вызывает некоторый метод презентатора
  2. Ведущий менеджер вызовов, который запускает асинхронную задачу
  3. Асинхронная задача в фоновом потоке вызывает службу и отправляет результат в шину событий
  4. Когда ведущий уведомляется о новых данных (по шине событий), он перезагружает представление

Я думаю о двух подходах к модульному тестированию в этой ситуации (предположим, что задача async выполняется последовательно в одном тестовом потоке):

  1. Это не имеет смысла тестировать каждый класс в разделении, потому что методы обычно не имеют логики, а только делегирования. Мы можем определить «блок» на уровне ведущего и его зависимостей, вплоть до уровня обслуживания (поэтому мы должны высмеивать только сервис). Результат, возвращаемый из службы, должен быть в конечном итоге доставлен ведущему, поэтому мы можем протестировать полный путь.

  2. Реализация используемой шины событий зависит от времени выполнения Android (Green Robot), поэтому, чтобы использовать ее в тесте, мы создали бы умную подделку, что довольно сложно. Таким образом, было бы лучше, если бы модульный тест должен был подделать шину событий как «внешнюю» зависимость. Поэтому для нашего случая использования мы должны отдельно тестировать ведущий путь -> шину событий и шину событий -> презентатор.

Какой подход был бы лучше для моего сценария?

Первый кажется более интуитивным: тесты проверяют, приводит ли пользовательское действие к правильному изменению вида. Если бы мы могли выполнять действие синхронно, менеджер, асинхронная задача и шина событий были бы ненужными – они просто шаблоны, не имеющие отношения к бизнес-логике. Я пропустил что-то, о чем я бы пожалел?

Intereting Posts
Потеря содержимого файла на Google Диске Сбросить значение целого в определенное время суток Экран всплывающего экрана Android во время загрузки Сосредоточьтесь на EditText в ListView, когда потомки блоков (Android) Удалить диакритические символы из строки в Java Добавить кнопку на пользовательском представлении в Android PackageInstallerActivity не найден на предварительном просмотре Android M Android запускает определенный URL-адрес с определенным браузером Просмотр размера кучи ddms Программно добавляя эффект анимации к (программно добавленному) popupWindow в android Масштабирование анимации в уже масштабированном виде Как публиковать обновления на странице Facebook автоматически по расписанию? Используя андроид Как очистить огонь RxJava и забыть подписки? Как закончить () нажатие кнопки «Активность на дому» в андроиде? Что я могу использовать, чтобы приложение Android могло взаимодействовать с приложением rails