Тестирование рукояти кинжала EntryPointAccessorsAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Тестирование рукояти кинжала EntryPointAccessors

Сообщение Anonymous »


Привет, у меня есть класс, который реализует абстракцию с параметром типа 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?
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»