Robolectric AndroidX фрагменты NoClassDefFoundError

После переноса кода и тестов в AndroidX все, кажется, работает довольно хорошо, однако тесты джобита Robolectric для двух фрагментов не выполняются из-за исключения стиля NoClassDefFoundError: androidx/ фрагмент /testing/R$. Трассировка стека:

java.lang.NoClassDefFoundError: androidx/ фрагмент / тестирование / стиль R $ в androidx.fragment.app.testing.FragmentScenario$EmptyFragmentActivity.onCreate(FragmentScenario.java:79) в android.app.Activity.performCreate(Activity.java:5933..java:69) в org.robolectric.shadows.ShadowLooper.runPaused(ShadowLooper.java:365) в org.robolectric.android.controller.ActivityController.create(ActivityController.java:69) в org.robolectric.android.control.ActivityController.create(ActivityController.java:74) в org.robolectric.android.internal.LocalActivityInvoker.startActivity(LocalActivityInvoker.java:39) в androidx.test.core.app.ActivityScenario.launch(ActivityScenario.java:207) в андроиде.fragment.app.testing.FragmentScenario.internalLaunch(FragmentScenario.java:283) в androidx.fragment.app.testing.FragmentScenario.launchInContainer(FragmentScenario.java:265)

Для тестирования фрагментов я использую FragmentScenario, и, похоже, FragmentScenario.EmptyFragmentActivity ссылается на отсутствующий класс R из пакета androidx.fragment.testing.R:

setTheme (getIntent (). getIntExtra (THEME_EXTRAS_BUNDLE_KEY, R.style.FragmentScenarioEmptyFragmentActivityTheme));

Есть идеи, что может быть не так? Может быть, мне не хватает зависимости, которая не так очевидна для меня.

Воспроизводится в следующем проекте: https://github.com/marcinbak/androidx-test-error

Также сообщается в системе отслеживания проблем Google: https://issuetracker.google.com/issues/122321150

1 ответ

Решение

Согласно ответу от Google, в тестовый APK необходимо включить артефакт androidx_fragment_test (androidx.fragment: фрагмент-тестирование: 1.1.0-alpha03) (не в APK инструментария или в тестовую зависимость).

Что это означает, что его нужно добавить как debugImplementation androix_fragment_test в ваш файл build.gradle.

Если вы также запускаете тесты для цели выпуска, вам нужно добавить реализацию androix_fragment_test.

Вы можете увидеть весь разговор в системе отслеживания проблем Google: https://issuetracker.google.com/issues/122321150

Другие вопросы по тегам