Эспрессо-тестирование с Dagger 2 и специальными прицелами

После недавней миграции на Dagger 2 приложение, над которым я работаю, использует @ActivityScope для каждой функции. Каждая функция приложения реализована с использованием шаблона MVP и имеет собственную настройку компонента локального кинжала, которая зависит от компонента приложения для зависимостей, которые требуются в течение всего жизненного цикла приложения (предоставляется приложением). Activity каждого компонента расширяет базовый класс, который предоставляет основной компонент приложения для метода, который переопределяется каждым действием для установки локального компонента кинжала (создает локальный компонент и создает экземпляр локального модуля).

Проблема, которую я пытаюсь решить, заключается в том, как внедрить макеты в тестируемое действие. Основная проблема, с которой я сталкиваюсь, заключается в том, что я не могу поменять местный компонент и соответствующий модуль на смоделированные во время выполнения. Я прочитал много статей о тестировании эспрессо с помощью Dagger 2, но они не пропагандируют чистую архитектуру. По большей части они полагаются на AppComponent для внедрения всех операций, где в моем случае компонент каждой функции отвечает за внедрение своей собственной активности.

До сих пор лучшим подходом, который я придумал, было введение компоновщика компонентов, который инициализируется только как часть тестовой настройки и в коде Activity, чтобы идти с этой настройкой, если она инициализирована, в противном случае настроить реальный компонент. Однако я не хочу смешивать производственный и тестовый код. Вот схема, которая представляет установку Dagger: Dagger 2 Setup

1 ответ

Подход, который я выбрал в конце, заключался в создании AndroidJUnitRunner как описано здесь, и для создания Компонентов / Модулей, которые обеспечивают макеты для каждой функции приложения, включая модуль Приложения, проверяют Google doc на лучшие практики. Кроме того, каждое тестируемое действие должно быть переопределено, чтобы внедрить макеты (только метод, который внедряет макеты зависимостей).

Чтобы поддерживать основной манифест приложения в чистоте, переопределенные тестовые действия объявляются в отладочном манифесте. Надеюсь, что этот подход поможет людям с аналогичными настройками Dagger 2 провести тестирование с помощью Espresso и Dagger 2.

Имейте день рок-н-ролла!

Другие вопросы по тегам