Dagger2 не вводит экземпляр в тест - PullRequest
0 голосов
/ 01 мая 2020

Я пытаюсь получить экземпляр OkHttp от TestComponent, у меня есть эта настройка

@Singleton
@Component(
    modules = [
        AndroidInjectionModule::class,
        RetrofitModule::class]
)
interface TestAppComponent : AndroidInjector<TestApp> {
    @Component.Factory
    interface Factory {
        fun create(@BindsInstance application: TestApp): TestAppComponent
    }
}

И тогда мой TestApp


open class TestApp : App() {

    override fun onCreate() {
        super.onCreate()
        DaggerTestAppComponent.factory()
            .create(this)
            .inject(this)
    }

}

Работает, но вещь находится на моем AbstractBaseTest Я не могу использовать

@Inject
lateinit var client : OkHttpClient

Даже если у меня есть метод предоставляет для этого в моем RetrofitModule

    @Provides
    @Singleton
    fun provideOkHttpClient(
        httpLoggingInterceptor: HttpLoggingInterceptor,
        headersInterceptor: HeadersInterceptor,
        errorInterceptor: ErrorInterceptor
    ): OkHttpClient = OkHttpClient()
        .newBuilder()
        .addInterceptor(httpLoggingInterceptor)
        .addInterceptor(headersInterceptor)
        .addInterceptor(errorInterceptor)
        .build()

И ошибка

kotlin.UninitializedPropertyAccessException: lateinit property client has not been initialized

Что мне не хватает?

Есть ответ на этот вопрос, но я не могу воспроизвести это Как переопределить модуль / зависимость в модульном тесте с Dagger 2.0?

1 Ответ

0 голосов
/ 01 мая 2020

Я предполагаю, что у вас есть класс SomeClass, который расширяет ваши AbstractBaseTest и SomeClass вызовы DaggerXComponent.create().inject(this) для внедрения его зависимостей. К сожалению, таким образом, зависимости, объявленные в AbstractBaseTest, не будут внедрены.

Вы должны создать функцию в AbstractBaseTest следующим образом:

fun injectDependencies() = DaggerXComponent.create().inject(this)

И иметь конструктор SomeClass и все другие классы, которые расширяют AbstractBaseTest для вызова этого метода.

Об этом есть обсуждение на github, пожалуйста, проверьте этот ответ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...