Я пытаюсь протестировать класс основной активности @AndroidEntryPoint с помощью Hilt Testing в своем приложении для Android. Класс PermissionHelper определяется следующим образом:
public class PermissionHelper {
private final AppCompatActivity mActivity;
@Inject
public PermissionHelper(AppCompatActivity activity) {
this.mActivity = activity;
}
}
Настройка Hilt-тестирования:
При использовании модульных тестов Android Studio не требует принудительного использования Hilt-тестирования. Однако для инструментальных тестов обязательно использовать Hilt-тестирование. Я создал тестовый модуль, который заменяет компонент «Активность». Я предоставляю помощник по активности и разрешениям следующим образом:
@Module
@TestInstallIn(components = [ActivityComponent::class], replaces = [ActivityModule::class])
class TestModule {
@Provides
@ActivityScoped
fun provideActivityScenario(): ActivityScenario {
// Launch MainActivity
return ActivityScenario.launch(MainActivity::class.java)
}
@Provides
@ActivityScoped
fun provideAppCompatActivity(scenario: ActivityScenario): Activity? {
// Extract AppCompatActivity from ActivityScenario
val activity = arrayOfNulls(1)
scenario.onActivity { a -> activity[0] = a }
return activity[0]
}
@ActivityScoped
@Provides
fun providePermissionHelperFake(activity: Activity): PermissionHelperFake {
return PermissionHelperFake(activity)
}
}
Обнаружена ошибка:
при использовании тестовых модулей и замене модуля активности Я получил ошибку, что активность имеет значение NULL и не может быть предоставлен, откуда я могу получить объект активности?
@UninstallModules(ActivityModule.class) // Uninstall the real PermissionModule
@HiltAndroidTest
@RunWith(AndroidJUnit4.class)
public class MainActivityTest {
@Rule public HiltAndroidRule hiltRule = new HiltAndroidRule(this);
@Inject PermissionHelperFake permissionHelper;
@Inject LayoutInflater layoutInflater;
@Inject FragmentManager fragmentManager;
@Before
public void setup() throws Exception {
hiltRule.inject();
}
@Test
public void testDependencies() {
assertNotNull(permissionHelper);
assertNotNull(layoutInflater);
assertNotNull(fragmentManager);
// Your test code here
}
Мои выводы заключаются в том, что Hilt не может обеспечивать активность или создавать активность, даже если я предоставляю активность из сценария, он может просто предоставлять контекст и его можно просто использовать в бэкэнд-тестирование.
Но при использовании инструментальных тестов студия Android заставляет меня использовать Hilt при запуске основного действия, поскольку это @AndroidEntryPoint, мой тест варианта использования также должен быть @HiltAndroidTest,
Почему тогда Android заставляет меня использовать hilt, если он не может обеспечить активность?
Есть идеи или рекомендации, как я могу начать тестирование пользовательского интерфейса с классами @AndroidEntryPoint ?
error: [Dagger/Nullable] android.app.Activity is not nullable, but is being provided by @Provides @dagger.hilt.android.scopes.ActivityScoped @org.jetbrains.annotations.Nullable android.app.Activity common.dependencyinjection.activity.TestModule.provideAppCompatActivity(androidx.test.core.app.ActivityScenario)
error: [Dagger/DuplicateBindings] android.app.Activity is bound multiple times:
public abstract static class SingletonC implements FragmentGetContextFix.FragmentGetContextFixEntryPoint,
rror: [Dagger/MissingBinding] android.app.Activity cannot be provided without an @Inject constructor or an @Provides-annotated method.
public abstract static class SingletonC implements FragmentGetContextFix.FragmentGetContextFixEntryPoint,
Подробнее здесь: https://stackoverflow.com/questions/787 ... nt-annotat
Почему Android заставляет меня использовать Hilt, если я хочу протестировать аннотированные классы @AndroidEntryPoint (U ⇐ Android
Форум для тех, кто программирует под Android
1721923185
Anonymous
Я пытаюсь протестировать класс основной активности @AndroidEntryPoint с помощью Hilt Testing в своем приложении для Android. Класс PermissionHelper определяется следующим образом:
public class PermissionHelper {
private final AppCompatActivity mActivity;
@Inject
public PermissionHelper(AppCompatActivity activity) {
this.mActivity = activity;
}
}
[b]Настройка Hilt-тестирования:[/b]
При использовании модульных тестов Android Studio не требует принудительного использования Hilt-тестирования. Однако для инструментальных тестов обязательно использовать Hilt-тестирование. Я создал тестовый модуль, который заменяет компонент «Активность». Я предоставляю помощник по активности и разрешениям следующим образом:
@Module
@TestInstallIn(components = [ActivityComponent::class], replaces = [ActivityModule::class])
class TestModule {
@Provides
@ActivityScoped
fun provideActivityScenario(): ActivityScenario {
// Launch MainActivity
return ActivityScenario.launch(MainActivity::class.java)
}
@Provides
@ActivityScoped
fun provideAppCompatActivity(scenario: ActivityScenario): Activity? {
// Extract AppCompatActivity from ActivityScenario
val activity = arrayOfNulls(1)
scenario.onActivity { a -> activity[0] = a }
return activity[0]
}
@ActivityScoped
@Provides
fun providePermissionHelperFake(activity: Activity): PermissionHelperFake {
return PermissionHelperFake(activity)
}
}
[b]Обнаружена ошибка:[/b]
при использовании тестовых модулей и замене модуля активности [b]Я получил ошибку, что активность имеет значение NULL и не может быть предоставлен[/b], откуда я могу получить объект активности?
@UninstallModules(ActivityModule.class) // Uninstall the real PermissionModule
@HiltAndroidTest
@RunWith(AndroidJUnit4.class)
public class MainActivityTest {
@Rule public HiltAndroidRule hiltRule = new HiltAndroidRule(this);
@Inject PermissionHelperFake permissionHelper;
@Inject LayoutInflater layoutInflater;
@Inject FragmentManager fragmentManager;
@Before
public void setup() throws Exception {
hiltRule.inject();
}
@Test
public void testDependencies() {
assertNotNull(permissionHelper);
assertNotNull(layoutInflater);
assertNotNull(fragmentManager);
// Your test code here
}
[b]Мои выводы[/b] заключаются в том, что Hilt не может обеспечивать активность или создавать активность, даже если я предоставляю активность из сценария, он может просто предоставлять контекст и его можно просто использовать в бэкэнд-тестирование.
Но при использовании инструментальных тестов студия Android заставляет меня использовать Hilt при запуске основного действия, поскольку это @AndroidEntryPoint, мой тест варианта использования также должен быть @HiltAndroidTest,
[b]Почему тогда Android заставляет меня использовать hilt, если он не может обеспечить активность?[/b]
Есть идеи или рекомендации, как я могу начать тестирование пользовательского интерфейса с классами @AndroidEntryPoint ?
error: [Dagger/Nullable] android.app.Activity is not nullable, but is being provided by @Provides @dagger.hilt.android.scopes.ActivityScoped @org.jetbrains.annotations.Nullable android.app.Activity common.dependencyinjection.activity.TestModule.provideAppCompatActivity(androidx.test.core.app.ActivityScenario)
error: [Dagger/DuplicateBindings] android.app.Activity is bound multiple times:
public abstract static class SingletonC implements FragmentGetContextFix.FragmentGetContextFixEntryPoint,
rror: [Dagger/MissingBinding] android.app.Activity cannot be provided without an @Inject constructor or an @Provides-annotated method.
public abstract static class SingletonC implements FragmentGetContextFix.FragmentGetContextFixEntryPoint,
Подробнее здесь: [url]https://stackoverflow.com/questions/78792557/why-android-enforces-me-to-use-hilt-if-i-want-to-test-androidentrypoint-annotat[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия