Robolectric AndroidX 片段 NoClassDefFoundError

2024-06-18

代码和测试迁移到之后AndroidX,一切似乎都工作得很好,但是 Robolectric junit 测试两个片段失败了,因为NoClassDefFoundError:androidx/fragment/testing/R$style例外。 堆栈跟踪:

java.lang.NoClassDefFoundError: androidx/fragment/testing/R$style 位于 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 https://github.com/marcinbak/androidx-test-error

Google 的问题跟踪器中也报告了:https://issuetracker.google.com/issues/122321150 https://issuetracker.google.com/issues/122321150


根据谷歌的回答,需要包括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 https://issuetracker.google.com/issues/122321150

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Robolectric AndroidX 片段 NoClassDefFoundError 的相关文章

随机推荐

  • Facebook 错误“验证验证码时出错”

    非常奇怪的错误 我用基德http developers facebook com docs authentication http developers facebook com docs authentication 所以我创建了对fb的
  • 如何与字符串进行部分匹配?

    如何输入单词的部分字母来查找该单词 例如 我有一个字符串数组 String s Cartoon Cheese Truck Pizza 如果我输入部分字母 例如 ca Che 或 piz 然后我就可以找到列表中的整个单词 Thanks str
  • tcpdump 是否受 iptables 过滤影响?

    如果我的开发机器有iptables规则到FORWARD一些数据包 这些数据包是否被 tcpdump 捕获 我有这个问题 因为我知道存在其他链称为INPUT如果数据包路由到 它会过滤发往应用程序的数据包FORWARD链 它会到达吗tcpdum
  • Android 何时使用 ContentResolver applyBatch 或 BulkInsert

    现在 对于我的应用程序 当我想要更改 ContentProvider 的数据时 我只需使用 ContentResolver 的插入 更新和删除方法 但在 Android SDK 中的几个示例项目中 我注意到它们使用了 applyBatch
  • 多实例 COM 对象

    我在 C 中使用 C 编写的 COM 对象 我只是通过 new 创建实例 我需要很多这样的物体 但每个其他 新 不会创建新实例 而仅提供第一个对象的引用 这就是为什么我对数据一团糟 是否可以每次都获取新实例 或者我应该在我的COM中实现IC
  • 向 Serilog 添加自定义属性

    我在应用程序中将 Serilog 与 MS SQL Server 接收器一起使用 假设我已经定义了以下类 public class Person public string FirstName get set public string L
  • CKEditor 禁用自动编辑 HTML 代码

    我需要在我的 CREditor 之一中禁用自动编辑代码 如果我将此代码作为 HTML 放置 div class kontaktJeden div class obr img src images insol png alt div div
  • 优化 SQL Server 上的删除

    Deletesql server 上的有时很慢 我经常需要优化它们以减少所需的时间 我一直在谷歌上搜索一些关于如何做到这一点的提示 并且我发现了各种各样的建议 我想知道你最喜欢和最有效的驯服删除野兽的技术 以及它们如何以及为什么起作用 到目
  • 学说 dbal querybuilder 作为准备好的语句

    我正在尝试创建一个 Doctrine DBAL 查询生成器对象并在其中设置一个参数 使用 postgres db dbal 2 3 4 原则 connection this gt em gt getConnection qb connect
  • 注入的 HttpContext 始终为 null

    老实说 这太令人兴奋了 我无法让它发挥作用 无论注入到何处 上下文始终为空 我是否必须在 Startup cs 中添加上下文实例 如果是 怎么办 始发呼叫 services AddTransient
  • NGINX 返回 405 不允许使用 POST 方法

    我有这个default conf server listen 443 ssl root etc nginx json server name myserver com ssl certificate etc ssl certs server
  • 如何使用正则表达式将多个
    标签替换为一个
    标签?

    I want br br 变成 br 正则表达式的模式是什么 注 br 标签可以连续出现两次以上 html preg replace br gt s i br html 这将捕获任何组合 br br or br 它们之间有任意数量或类型的空
  • paramiko ssh.connect - 要发送什么参数?

    我真的很新python and ssh 我正在尝试编写一个简单的程序来打开ssh连接使用python 我已经有了paramiko 但我遇到的问题是 使用终端我使用以下命令打开我的ssh ssh username email protecte
  • 存档期间的位码编译永远不会完成

    我正在准备一个通过 Test Flight 进行临时分发的应用程序 我已经 成功 完成了这篇 Ray Wenderlich 文章中的所有准备步骤 https www raywenderlich com 48750 testflight sd
  • 如何编写可以与操作系统交互的VLC插件

    我需要找出是否有可能以及如何 我不关心C C Lua Python 制作一个VLC插件 其目的是由VLC播放器在特定时间调用视频流的将执行一些操作 我需要做的操作是打开 UDP 套接字并发送从当前播放的视频附带的文件中读取的一些数据 我需要
  • 如何在 C++ 中取消引用指向对象指针映射的指针? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 在下面的示例中 我想访问employeeID从课堂上Employee通过使用指针employeePayroll class Employee
  • Pandas Dataframe 在由索引分隔的部分中进行插值

    我的示例代码如下 import pandas as pd dictx col1 1 nan nan nan 5 nan 7 nan 9 nan nan nan 13 col2 20 nan nan nan 22 nan 25 nan 30
  • jQuery 验证插件,两个字段之一是必需的

    我有一个包含 2 个字段的表单 手机号码 和电话号码 至少必须填写其中 1 个字段 但也可以同时填写两个字段 如果它们都没有被填充 我需要 jquery validate 来抛出错误 我通过以下方式实现了这一点 rules mobile r
  • 熊猫:什么是视图?

    请帮助我理解 什么是view在熊猫中 我知道如果我们改变一些东西view我们总是对原始对象进行更改 但物体的视图和原始物体有不同id s例如 这是否意味着view是另一个对象引用原始对象吗 机制是什么 我尝试过但找不到解释 import p
  • Robolectric AndroidX 片段 NoClassDefFoundError

    代码和测试迁移到之后AndroidX 一切似乎都工作得很好 但是 Robolectric junit 测试两个片段失败了 因为NoClassDefFoundError androidx fragment testing R style例外