Robolectric AndroidX 片段 NoClassDefFoundError
Robolectric AndroidX fragments NoClassDefFoundError
将代码和测试迁移到 AndroidX 后,一切似乎都运行良好,但是 Robolectric 由于 [=25=,两个片段的 junit 测试失败了]NoClassDefFoundError: androidx/fragment/testing/R$style 异常。
堆栈跟踪:
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) 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[=11=](ActivityController.java:69)
at
org.robolectric.shadows.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)
at
androidx.fragment.app.testing.FragmentScenario.launchInContainer(FragmentScenario.java:265)
为了测试片段,我正在使用 FragmentScenario,似乎 FragmentScenario.EmptyFragmentActivity 指的是包 androidx.fragment.testing.R:
中缺少的 R class
setTheme(getIntent().getIntExtra(THEME_EXTRAS_BUNDLE_KEY,
R.style.FragmentScenarioEmptyFragmentActivityTheme));
知道哪里出了问题吗?也许我错过了一个对我来说不那么明显的依赖关系。
可在以下项目中重现:
https://github.com/marcinbak/androidx-test-error
也在 Google 的问题跟踪器中报告:https://issuetracker.google.com/issues/122321150
根据Google的回答,需要包含androidx_fragment_test(androidx.fragment:片段测试: 1.1.0-alpha03) 测试 APK 中的工件(不在检测 APK 或测试依赖项中)。
这意味着它必须作为 debugImplementation androix_fragment_test 添加到您的 build.gradle 文件中。
如果您还 运行 测试发布目标,那么您必须添加 实现 androix_fragment_test.
您可以在 Google 的问题跟踪器中看到整个对话:https://issuetracker.google.com/issues/122321150
将代码和测试迁移到 AndroidX 后,一切似乎都运行良好,但是 Robolectric 由于 [=25=,两个片段的 junit 测试失败了]NoClassDefFoundError: androidx/fragment/testing/R$style 异常。 堆栈跟踪:
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) 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[=11=](ActivityController.java:69) at org.robolectric.shadows.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) at androidx.fragment.app.testing.FragmentScenario.launchInContainer(FragmentScenario.java:265)
为了测试片段,我正在使用 FragmentScenario,似乎 FragmentScenario.EmptyFragmentActivity 指的是包 androidx.fragment.testing.R:
中缺少的 R classsetTheme(getIntent().getIntExtra(THEME_EXTRAS_BUNDLE_KEY, R.style.FragmentScenarioEmptyFragmentActivityTheme));
知道哪里出了问题吗?也许我错过了一个对我来说不那么明显的依赖关系。
可在以下项目中重现: https://github.com/marcinbak/androidx-test-error
也在 Google 的问题跟踪器中报告:https://issuetracker.google.com/issues/122321150
根据Google的回答,需要包含androidx_fragment_test(androidx.fragment:片段测试: 1.1.0-alpha03) 测试 APK 中的工件(不在检测 APK 或测试依赖项中)。
这意味着它必须作为 debugImplementation androix_fragment_test 添加到您的 build.gradle 文件中。
如果您还 运行 测试发布目标,那么您必须添加 实现 androix_fragment_test.
您可以在 Google 的问题跟踪器中看到整个对话:https://issuetracker.google.com/issues/122321150