Динамическое связывание с кинжалом 2
У меня проблемы с переносом приложения для Android из Dagger
в Dagger2
,
Я использую Dagger, чтобы вводить макеты на разных уровнях во время тестирования (устройство, функциональное устройство и все что между ними).
Например, у меня есть NetworkingModule
который обеспечивает HttpTransport
и ServerConnector
, Для некоторых тестов я просто высмеиваю слой http, для других - ServerConnector
и другие тесты используют классы релизов для тестирования интеграции с реальным тестовым сервером.
Эти тесты могут быть запущены на всех версиях сборки (отладка, выпуск,...).
Я нашел только описания Dagger2
которые устанавливают одну статическую конфигурацию внедрения для каждого типа сборки - т.е. компонент выпуска для привязки реальных классов и компонент отладки для привязки одного набора макетов.
Мне нужно найти способ, чтобы тестовые случаи заменили модули на этапе запуска приложения.
Как мне этого добиться? В моих мыслях я всегда застреваю, когда приложение запускает построение графа, для которого оно должно использовать Компонент, который является реализацией определенного интерфейса, который имеет статическую аннотацию своих модулей???
Спросить по-другому: возможно ли собрать несколько модулей в одной сборке, которые обеспечивают одинаковые инъекции? Как бы я тогда вводил с правильным модулем во время выполнения?
Может кто-нибудь, пожалуйста, напишите мне решение для моего примера NetworkingModule
,
Кстати: я активно использую Espresso
, Robolectric
, а также Mockito
,
Спасибо.
1 ответ
Нашел решение:
Мне не нужно создавать конкретные компоненты или модули.
Мои модули просто обрабатывают делегатов, которые я внедряю и устанавливаю для инъекций при тестировании. Это очень дешево для релизных сборок. А для тестирования я могу даже немного подумать об удобных функциях.