【问题标题】:All sorts of errors running Robolectric tests: Theme.AppCompat, NoClassDefFoundError and more运行 Robolectric 测试的各种错误:Theme.AppCompat、NoClassDefFoundError 等
【发布时间】:2017-03-14 13:11:25
【问题描述】:

我的 Android 项目有大约 70 次 Robolectric 测试,它们都通过了 2 个月。不知何故,从今天开始,测试失败并出现奇怪的错误消息:

  • java.lang.IllegalStateException:您需要在此活动中使用 Theme.AppCompat 主题(或后代)。
  • java.lang.NoClassDefFoundError: org/apache/http/client/HttpClient
  • 也无法加载资源文件

我没有更改我的代码,所以它不可能是代码相关的问题。我清理了项目和 gradle,但没有帮助。前几天我确实做了一个Android Studio推广的更新,不知道是否相关。

还有其他人遇到这个问题吗?我该如何摆脱这种糟糕的状态?

-- 编辑--

Robolectric 版本很重要!基于 cmets、robolectric 版本 vs. 中的建议的有趣观察失败率:

  • 3.3.1,约 40% 的测试失败。
  • 3.2.2,~40% 失败(与 3.3.1 相同)
  • 3.1.4,~15% 失败
  • 3.1.2,~0% 失败(带有警告,见下文)
  • 3.1,100% 失败 (!)

另一个观察结果是它不一致。如果我跑了整套,都通过了!但是如果我只运行一个测试文件,所有的都会失败并显示此消息:

没有这样的清单文件: build/intermediates/bundles/debug/AndroidManifest.xml

【问题讨论】:

  • 您使用的是哪个版本的 Robolectric?
  • 在 Robolectric 3.0 上运行良好。您是否尝试过“使缓存无效/重新启动”?您是否尝试在命令行上使用 gradlew 运行它:gradlew clean testDebug
  • 感谢 cmets 的帮助。我正在尝试不同的版本。请查看我的更新。
  • 你能展示一个你的测试设置的例子吗?如果你从命令行运行它会成功吗?
  • 如果我做“./gradlew test”,它可以工作;但是这与从 AS 一次运行没有区别,这也可以。不确定我的测试设置是什么,我猜只是 AS 的默认设置。

标签: android android-studio robolectric robolectric-gradle-plugin


【解决方案1】:

AS 对依赖关系的变化非常敏感,AS 默认不设置测试的工作目录。

No such manifest ... 错误直接说 Robolectric 找不到您的清单。

每当您在 AS 中测试失败时,首先检查命令行是否可重现。

检查第一个工作目录以进行测试:

我还建议默认将模块目录设置为工作目录:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    • 2014-03-09
    • 2016-03-04
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    相关资源
    最近更新 更多