在将代码和测试迁移到 AndroidX 之后,一切似乎都运行良好,但是由于 NoClassDefFoundError:androidx / fragment / testing / R $,两个片段的Robolectric junit测试失败了样式例外。 堆栈跟踪:
java.lang.NoClassDefFoundError:androidx / fragment / testing / R $ style at androidx.fragment.app.testing.FragmentScenario $ EmptyFragmentActivity.onCreate(FragmentScenario.java:79) 在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.ActivityController.create(ActivityController.java:74) 在 org.robolectric.android.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
答案 0 :(得分:3)
根据Google的回答,要求在测试APK中包含 androidx_fragment_test ( androidx.fragment:fragment-testing:1.1.0-alpha03 )伪像(不是在检测APK或测试依赖项中。
这意味着它必须作为 debugImplementation androix_fragment_test 添加到您的build.gradle文件中。
如果您还在发布目标上运行测试,则必须添加实施和roix_fragment_test 。
您可以在Google的问题跟踪器中查看整个对话:https://issuetracker.google.com/issues/122321150