Dagger2 + Android мультимодуль + тестирование инструментов + переопределение модуля - PullRequest
0 голосов
/ 07 июля 2019

Я перевожу проект в многомодульную архитектуру, но не могу найти способ перенести тесты.

Для простоты, скажем, есть 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.

Есть ли какой-нибудь элегантный / стандартный способ добиться этого? Спасибо!

1 Ответ

0 голосов
/ 16 июля 2019

Вы можете иметь дополнительный модуль testing (только для тестирования модуля feature):

feature-testing (com.android.application)

Внутри вы можете иметь тестирование Application и поставлять модули тестирования так, как вы хотите.

...