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

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

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

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

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

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

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

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

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