Я перевожу проект в многомодульную архитектуру, но не могу найти способ перенести тесты.
Для простоты, скажем, есть 3 модуля:
app
(com.android.application)
core
(com.android.library)
feature
(com.android.library)
app
включает в себя core
и feature
feature
включает core
core
содержит класс Application
и основной Component
// MyApplication.kt
class MyApplication : Application {
override fun onCreate() {
super.onCreate()
DaggerMainComponent.create()
}
}
// MainComponent.kt
@Component(modules = [MainModule::class])
class MainComponent {
fun provideSomething(): Something
}
feature
имеет свои Component
// FeatureComponent.kt
@Component(module = [FeatureModule::class], dependencies = [MainComponent::class])
class FeatureComponent {
fun inject(activity: FeatureActivity)
}
// FeatureActivity.kt
class FeatureActivity : Activity {
override fun onCreate(@Nullable savedInstanceState: Bundle?) {
DaggerFeatureComponent.builder()
.mainComponent(mainComponent)
.build()
.inject(this)
super.onCreate(savedInstanceState)
}
}
До миграции был только 1 компонент, который можно было переопределить тестовыми модулями во время теста, используя трюк runner
.
Моя проблема в том, как использовать тестовые модули при тестировании FeatureActivity
? Одним из способов может быть FeatureComponent
в MyApplication
и использовать ту же тактику. Но в идеале компоненты компонентов не выставляются. Я также пытался создать провайдеров для поставки модулей и использовать PowerMock
для переопределения классов singleton / final.
Есть ли какой-нибудь элегантный / стандартный способ добиться этого? Спасибо!