问题标签 [robolectric-gradle-plugin]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2621 浏览

android - 运行 Roboelectric 测试时的 Resources$NotFoundException

我刚刚用一个新应用程序设置了 Roboelectric 3.2.2,并且我已经编写了我的第一个简单测试:

我已按照此处此处的所有设置和说明进行操作,但每次尝试运行测试时仍然出现此错误:

此异常发生在我调用的测试的第一行setupActivity()

0 投票
1 回答
1519 浏览

robolectric - Robolectric 3.2.2 获取影子类的实例?

我已经在我的 android 应用程序上实现了 MVP,并且正在考虑创建测试脚本来测试基本行为功能。长话短说,有没有办法获取我创建的阴影对象的实例?

我希望能够告诉模拟模型对象在方法中返回什么,例如,当调用 getGender() 时,返回 Male,但对于另一种方法,getGender() 将返回 Female。

我现在已经找到了,但我很幸运模型的设计。这是测试:

模型构造函数将上下文作为构造,因此我可以创建一个测试活动,它扩展了我要测试的活动。

这个新模型将包含我想要更改的值的 getter 和 setter。在影子对象的构造函数中,我可以将上下文转换为测试活动,然后模拟模型的 getter 可以返回我想要的:

编辑——>不可能,但有一个解决方法。在 GenderPreferenceInteractorShaddow 类中,将引用传回给 NewPreferenceMobileActivityTest 类,我们就有了对该类的引用。

这样做的缺点是您需要将 Gender 变量设置为默认值

0 投票
1 回答
347 浏览

android - 运行 Robolectric 测试的各种错误:Theme.AppCompat、NoClassDefFoundError 等

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

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

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

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

- 编辑 -

Robolectric 版本很重要!基于评论中的建议的有趣观察,robolectric 版本与故障率:

  • 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

0 投票
1 回答
3116 浏览

android - Android - 使用 Robolectric 测试字符串资源

我只是想测试获取 String 资源是否等于我认为它应该等于的值。我的问题似乎是我的项目中有领域。我知道 Robolectric 不支持 Realm(它在文档中说明),但我根本没有调用 Realm,所以我觉得可能有办法做到这一点。

看起来它确实在尝试调用Realm

编辑:我尝试了更多的东西,似乎manifest在 @Config 注释中设置是问题,但后来我得到了android.content.res.Resources$NotFoundException: unknown resource 2131362072

还有其他想法吗?我可以制作另一个Realm不被调用的应用程序类吗?/test 目录怎么知道呢?

编辑大卫:

我试过这个:

但我得到一个:

android.content.res.Resources$NotFoundException: unknown resource 2131362072

如果我将其更改为

我明白了

0 投票
4 回答
1671 浏览

android - Robolectric 测试开始时挂断 - 从 sonatype 转移

我在项目中配置 Robolectric 时遇到问题。如果重要的话,我也在使用 Kotlin。

这是我的 build.gradle

}

}

}

当我运行测试时,它挂断并在控制台上出现消息:

从位于https://oss.sonatype.org/content的存储库 sonatype 下载:org/robolectric/android-all/o-preview-4-robolectric-0/android-all-o-preview-4-robolectric-0.jar /groups/public/ 从 sonatype 传输 68498K

我等了大约 10-15 分钟,仍然没有。

0 投票
2 回答
2887 浏览

android - 如何使用 Android 依赖项和 robolectric 运行 Junit5 测试

我正在尝试运行这样的单元测试:

这是一个带有 Android 依赖项(即)和 Robolectric的Junit5测试。Looper.getMainLooper()

我正在使用 mannodermaus 的junit5 android 插件,它允许在 Android 设置中运行 junit5。但这不是开箱即用的,因为它不会加载 robolectric。所以我尝试了 alixwar 的分支来处理 robolectric 和 junit5 测试覆盖率,但仍然不会使用 Android 类。

我还开始研究如何在 junit5 上运行 robolectric 测试,这需要了解其RobolectricTestRunner工作原理以及如何将代码移植到 JUnit5 平台。我对新的 junit5 平台了解甚少,但我发现我可以在org.junit.platform.runner.JUnitPlatformrunner 之上构建,以遵循 test runner 概念,这是junit-platform-runner包的一部分。但这与原来的 Junit4 相距甚远,SandBoxTestRunner以至于我无法完成移植。

那么实现 robolectric junit5 支持的最可行路径是什么,或者我是否缺少任何(明显的)概念?

0 投票
1 回答
1328 浏览

android - Room-library(arch-component) 的 Robolectric-Tests 案例错误

我使用 Room 来玩 SQLite。当应用程序运行并且将播放单测试时,一切都很好。一切顺利。

问题是如果我用两个以上的案例运行 Robolectric-tests,测试就无法通过。结帐这个这个。他们可能对其他 ORM 有所帮助,但对 Room 没有帮助。

任何想法?也在这里问。

0 投票
4 回答
6809 浏览

android - Android Studio 无法识别“RobolectricTestRunner.class”

我正在尝试使用 Robolectric 运行单元测试,但 Android Studio 无法识别以下类别:

细节:

我正在导入依赖项:

和:

它根本没有出现导入类的选项。我应该添加更多我忘记的依赖项吗?

错误:

0 投票
1 回答
283 浏览

java - 使用 Robolectric 3.6.1 时出现 java.lang.IllegalAccessError

当我运行 JUnit 测试时,它会引发以下错误:
java.lang.IllegalAccessError: tried to access field org.robolectric.annotation.Config$Builder.sdk from class org.robolectric.RobolectricTestRunner$1

似乎这里有什么问题RobolectricTestRunner.java(3.6.1)

截图

截图中的代码在robolectric-3.6.1-resources.jar

环境:

  • JUnit:4.12
  • Robolectric 3.6.1
  • Android Gradle 插件:2.3.3
  • 安卓工作室:3.0.1
  • 操作系统:MacOS 10.13.2

任何人都可以帮助我吗?谢谢

0 投票
0 回答
140 浏览

robolectric - 使用段分析抛出 java.lang.IllegalArgumentException 的应用程序:需要 INTERNET 权限

问题:我正在尝试使用 robolectric 为我的应用程序运行测试用例。我的应用程序是细分分析。它在我的清单文件中已经存在时抛出 Internet 权限异常。

robolectric 版本:3.7.1,targetSDKVersion:26,gradle:3.0.1 命令:./gradlew clean testBuildDebug