机器人AndroidX碎片NoClassDefFoundError



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

java.lang.NoClassDefFoundError:androidx/fragment/testing/R$样式androidx.fragment.app.testing.FragmentScenario$EmptyFragmentActivity.onCreate(FragmentScinario.java:79)在android.app.Activity.performCreate(Activity.java:55933)android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)在androidx.test.runner.MonitoringInstrumentation.callActivityOnCreate(MonitoringInstrumentation.java:674)在org.roboelectric.android.controller.ActivityController.lambda$create$0(ActivityControl.java:69)在org.roboelectric.shadow.ShadowLooper.runPaused(ShadowLooper.java:365)在org.roboelectric.android.controller.ActivityController.create(ActivityControl.java:69)在org.roboelectric.android.controller.ActivityController.create(ActivityControl.java:74)在org.roboelectric.android.internal.LocactivityInvoker.startActivity(LocalActivityInvoker.java:39)在androidx.test.core.app.ActivityScenario.slaunch(ActivitySenario.java:207)在androidx.fragment.app.testing.FragmentScenario.internalLaunch(FragmentScinario.java:283)在androidx.fragment.app.testing.FragmentScenario.launchInContainer(FragmentScinario.java:265)

对于测试片段,我使用的是FragmentScenario.EmptyFragmentActivity似乎指的是包androidx.fragment.testing.R:中缺少的R类

setTheme(getIntent().getIntExtra(THEME_EXTRAS_UNDLE_KEY,R.style.FrageScenarioEmptyFragmentActivityTheme);

知道可能出了什么问题吗?也许我错过了一个对我来说不那么明显的依赖

可在以下项目中复制:https://github.com/marcinbak/androidx-test-error

同样在谷歌的问题跟踪器中报道:https://issuetracker.google.com/issues/122321150

根据谷歌的回答,需要在测试APK中包括androidx_fragment_test(androidx.fragment:fragment-test:1.1.0-alpha03)工件(不在仪器APK或测试依赖项中)。

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

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

你可以在谷歌的问题跟踪器中看到整个对话:https://issuetracker.google.com/issues/122321150

最新更新