在代码和测试迁移到AndroidX之后,所有这些看起来都运行得很好,但是由于NoClassDefFoundError:异常,对两个片段的Robolectric测试失败了。堆栈跟踪:
androidx.fragment.app.testing.FragmentScenario$EmptyFragmentActivity.onCreate(FragmentScenario.java:79) at android.app.Activity.performCreate(Activity.java:5933) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) at androidx.test.runner.MonitoringInstrumentation.callActivityOnCreate(MonitoringInstrumentation.java:674) at org.robolectric.android.controller.ActivityController.lambda$create$0(ActivityController.java:69) at org.robolectric.shadows java.lang.NoClassDefFoundError.ShadowLooper.runPaused(ShadowLooper.java:365) at org.robolectric.android.controller.ActivityController.create(ActivityController.java:69) at org.robolectric.android.controller.ActivityController.create(ActivityController.java:74) at org.robolectric.android.internal.LocalActivityInvoker.startActivity(LocalActivityInvoker.java:39) at androidx.test.core.app.ActivityScenario.launch(ActivityScenario.java:207) at androidx.fragment.app.testing.FragmentScenario.internalLaunch(FragmentScenario.java:283)在androidx.fragment.app.testing.FragmentScenario.launchInContainer(FragmentScenario.java:265)
对于测试片段,我使用的是FragmentScenario,似乎FragmentScenario.EmptyFragmentActivity引用了一个来自于androidx.frament.testing.R包中丢失的R类:
setTheme(getIntent().getIntExtra(THEME_EXTRAS_BUNDLE_KEY,R.style.FragmentScenarioEmptyFragmentActivityTheme));
知道有什么不对劲吗?也许我错过了一种对我来说不那么明显的依赖。
可复制以下项目:https://github.com/marcinbak/androidx-test-error
在谷歌的问题追踪器中也有报道:https://issuetracker.google.com/issues/122321150
发布于 2019-01-05 10:12:51
根据谷歌的回答,它需要在测试APK中包含androidx_fragment_test androidx_fragment_test工件(而不是在测试工具APK或测试依赖项中)。
这意味着它必须作为debugImplementation androix_fragment_test添加到build.gradle文件中。
如果您还在发布目标上运行测试,那么您必须添加实现androix_fragment_test。
你可以在谷歌的问题追踪器:https://issuetracker.google.com/issues/122321150中看到整个对话
https://stackoverflow.com/questions/54007609
复制相似问题