Бит введения здесь
- Проект содержит
core
и app
компоненты - Некоторые служебные классы помещены в
core
компонент, чтобы упростить тесты JUnit в других модулях - Кинжал используется во всех модулях
Вот структура проекта
core
___src
______main
_________com.core
____________CoreComponent
______test
_________com.core.test
____________SomeMockData
___build/generated/source/kapt
______coreDebug
_________com.core
____________DaggerCoreComponent
app
___src
______main
_________com.foo
____________AwesomeComponent
____________ConcreteClassA
______test
_________com.foo
____________TestAweseomeComponent
____________MyJUnitTest
___build/generated/source/kapt
______appDebug
_________com.foo
____________DaggerAwesomeComponent
______appDebugUnitTest
_________com.foo
____________DaggerTestAwesomeComponent
В приложении build.gradle
ядро добавлено как основная и тестовая зависимость
implementation project(':core')
testImplementation project(':core')
Dagger 2 - добавлен для codegen, и он успешно генерирует DaggerTestComponent
testImplementation dagger.xx
kaptTest daggerProcessor.xx
Здесь есть две проблемы
SomeMockData
помещенный внутрь core/test
недоступен в app/test
источниках (хотя IDE не показывает никакой ошибки). Во время работы MyJUnitTest
выдает ошибку.
Сгенерировано DaggerTestAwesomeComponent
не обнаруживает TestAwesomeComponent
, а DaggerTestAwesomeComponent
не отображается в MyJUnitTest
. Как мы знаем, сгенерированный DaggerAwesomeComponent
работает просто отлично.
ПРИМЕЧАНИЕ. Для простоты я исключил классы инжекторов, также генерируется MyJUnitTest_MembersInjector
. Как у меня @Inject в тестовом классе