首页 > 解决方案 > Robolectric AndroidX 片段 NoClassDefFoundError

问题描述

将代码和测试迁移到AndroidX 后,一切似乎都运行良好,但是由于NoClassDefFoundError: androidx/fragment/testing/R$style异常,两个片段的 Robolectric junit 测试失败。堆栈跟踪:

java.lang.NoClassDefFoundError: androidx/fragment/testing/R$style at androidx.fragment.app.testing.FragmentScenario$EmptyFragmentActivity.onCreate(FragmentScenario.java:79) at android.app.Activity.performCreate(Activity.java:5933 ) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 在 androidx.test.runner.MonitoringInstrumentation.callActivityOnCreate(MonitoringInstrumentation.java:674) 在 org.robolectric.android.controller.ActivityController.lambda$create$0(ActivityController .java:69) 在 org.robolectric.shadows.ShadowLooper.runPaused(ShadowLooper.java:365) 在 org.robolectric.android.controller.ActivityController.create(ActivityController.java:69) 在 org.robolectric.android.controller。 org.robolectric.android 上的 ActivityController.create(ActivityController.java:74)。internal.LocalActivityInvoker.startActivity(LocalActivityInvoker.java:39) 在 androidx.test.core.app.ActivityScenario.launch(ActivityScenario.java:207) 在 androidx.fragment.app.testing.FragmentScenario.internalLaunch(FragmentScenario.java:283)在 androidx.fragment.app.testing.FragmentScenario.launchInContainer(FragmentScenario.java:265)

为了测试片段,我正在使用 FragmentScenario,似乎 FragmentScenario.EmptyFragmentActivity 指的是包 androidx.fragment.testing.R 中缺少的 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

标签: androidrobolectricandroidxandroidx-test

解决方案


根据 Google 的回答,它需要在测试 APK 中包含androidx_fragment_test ( androidx.fragment:fragment-testing:1.1.0-alpha03 ) 工件(不在检测 APK 或测试依赖项中)。

这意味着它必须作为debugImplementation androix_fragment_test添加到您的 build.gradle 文件中。

如果您还在发布目标上运行测试,那么您必须添加实现 android_fragment_test

您可以在 Google 的问题跟踪器中查看整个对话:https ://issuetracker.google.com/issues/122321150


推荐阅读