Robolectric AndroidX片段NoClassDefFoundError

时间:2019-01-02 13:56:10

标签: android robolectric androidx androidx-test

在将代码和测试迁移到 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

1 个答案:

答案 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