Тестирование рукояти кинжала EntryPointAccessors ⇐ Android
Тестирование рукояти кинжала EntryPointAccessors
Привет, у меня есть класс, который реализует абстракцию с параметром типа Foo и предоставляется через EntryPointAccessors непосредственно в абстрактный класс. Что-то вроде этого
SomethingImportantBuilderImpl( ... ): AbstractSomethingImportantBuilder( foo: Foo = EntryPointAccessors.fromApplication(applicationContext, FooEntryPoint::class.java).provideFoo() ) Все работает так, как ожидалось, но как теперь передать Foo через EntryPointAccessor в SomethingImportantBuilder в модульном тесте?
Каждый раз при запуске теста сообщается следующее:
Не удалось найти приложение в данном контексте: null java.lang.IllegalStateException: не удалось найти приложение в данном контексте: ноль в dagger.hilt.android.internal.Contexts.getApplication(Contexts.java:42) в dagger.hilt.android.EntryPointAccessors.fromApplication(EntryPointAccessors.java:37) Любая помощь/предложение? Как я могу обеспечить эту зависимость в модульном тесте? Также использую Mockk.
Изменить 1: если я попытаюсь посмеяться над этим вот так:
каждый { EntryPointAccessors.fromApplication(any(), FooEntryPoint::class.java).provideFoo() } возвращает макет (расслабленный = true)
выдает следующую ошибку: android.content.Context.getApplicationContext()Landroid/content/Context;
Редактирование 2: попробовал использовать Mockk, поэтому я высмеиваю интерфейс FooEntryPoint, где hilt реализует под капотом эту точку входа в интерфейсе Singleton/Context. не работает, поскольку не инициализирует контекст:
частный контекст lateinit var: Приложение @До забавная установка(){ контекст = макет (moreInterfaces = arrayOf (FooEntryPoint:: класс, GeneratedComponent:: класс), расслабленный = true) } @Тест весело использоватьContext(){ println(context) //использование контекста выдает ошибку, сообщающую, что переменная lateinit не инициализирована. } Ошибка Контекст свойства lateinit не был инициализирован kotlin.UninitializedPropertyAccessException: контекст свойства lateinit не был инициализирован
Проблема все та же. Как предоставить applicationContext для EntryPoint?
Привет, у меня есть класс, который реализует абстракцию с параметром типа Foo и предоставляется через EntryPointAccessors непосредственно в абстрактный класс. Что-то вроде этого
SomethingImportantBuilderImpl( ... ): AbstractSomethingImportantBuilder( foo: Foo = EntryPointAccessors.fromApplication(applicationContext, FooEntryPoint::class.java).provideFoo() ) Все работает так, как ожидалось, но как теперь передать Foo через EntryPointAccessor в SomethingImportantBuilder в модульном тесте?
Каждый раз при запуске теста сообщается следующее:
Не удалось найти приложение в данном контексте: null java.lang.IllegalStateException: не удалось найти приложение в данном контексте: ноль в dagger.hilt.android.internal.Contexts.getApplication(Contexts.java:42) в dagger.hilt.android.EntryPointAccessors.fromApplication(EntryPointAccessors.java:37) Любая помощь/предложение? Как я могу обеспечить эту зависимость в модульном тесте? Также использую Mockk.
Изменить 1: если я попытаюсь посмеяться над этим вот так:
каждый { EntryPointAccessors.fromApplication(any(), FooEntryPoint::class.java).provideFoo() } возвращает макет (расслабленный = true)
выдает следующую ошибку: android.content.Context.getApplicationContext()Landroid/content/Context;
Редактирование 2: попробовал использовать Mockk, поэтому я высмеиваю интерфейс FooEntryPoint, где hilt реализует под капотом эту точку входа в интерфейсе Singleton/Context. не работает, поскольку не инициализирует контекст:
частный контекст lateinit var: Приложение @До забавная установка(){ контекст = макет (moreInterfaces = arrayOf (FooEntryPoint:: класс, GeneratedComponent:: класс), расслабленный = true) } @Тест весело использоватьContext(){ println(context) //использование контекста выдает ошибку, сообщающую, что переменная lateinit не инициализирована. } Ошибка Контекст свойства lateinit не был инициализирован kotlin.UninitializedPropertyAccessException: контекст свойства lateinit не был инициализирован
Проблема все та же. Как предоставить applicationContext для EntryPoint?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение