Android Studio 3.6.3/4.0/4.1/4.2配置Robolectric-3.8/4.3.1/4.5.1/4.6.1 Powermock-1.6.6单元测试环境

基础配置以及常见错误


目前版本的Android Studio 3.6.3/4.0/4.1/4.2使用Robolectric-3.8/4.3.1/4.5.1/4.6.1,只能配合Powermock-1.6.6,不能高于这个版本PowerMock ,尽管软件源中的版本已经更新升级到2.0.7版本了,但是Robolectric并没有及时更新依赖。尝试过使用最新版本的PowerMock,结果很多莫名的报错。

如果 Windows 系统下出现如下提示,受限于Windows系统路径不能超过260个字符的限制

貌似Windows 10 Build 14352版中已经可以通过修改注册表去除260字符的路径长度限制了。

在项目/.idea/workspace.xml文件中添加一行代码如下

对于使用MultiDex的应用,如果报告如下错误:

需要在build.gradle中引入

例子测试代码:

注意,需要

才能使得配置生效。

如果发生如下错误:

JDK 1.7引入了代码校验,这个我们需要关闭这个功能才行,如下图:

可惜的是, 目前如果需要在Android Studio中运行或者测试单个测试用例,需要每个测试文件单独添加才行。

对于使用

运行测试的情况来说,需要在项目app/build.gradle下添加如下内容:

也可以添加到defaultConfig下面,如下:

这个问题更详细的解释如下:

脚本中运行全部单元测试:

打包编译发行版本:

最后,编译执行的JDK的版本一般建议跟Android Studio使用的JDK一致,完全可以使用Android Studio自带的JDK进行编译。

当前建议的版本

目前,暂时不建议在生产环境中使用Android Studio 4.2发布版本,目前测试发现Android Studio 4.2编译出的代码,在华为系列手机上存在问题,主要是崩溃问题。可能出现如下崩溃日志:

如果升级到Android Studio 4.2执行测试用例的时候,可能报告如下错误:

这个问题是由于Android Studio 4.2自带的JDK版本已经升级到了Java 11.0.8版本,跟PowerMock不兼容。

解决此问题的方式是在测试用例的忽略列表中增加:

另外,在Android Studio 4.2使用Robolectric-4.5.1以下的版本(比如Robolectric-4.3.1)执行测试用例的时候,可能报告如下错误信息:

这个问题是由于Android Studio 4.2自带的JDK版本已经升级到了Java 11.0.8版本,当Robolectric去服务器下载依赖包的时候,默认使用HTTP地址。当服务器强制要求重定向到HTTPS地址,这部分代码处理存在问题。

解决这个问题的方法就是升级到 Robolectric-4.5.1以及以上的版本即可。

Android Studio Chipmunk | 2021.2.1 Patch 1 以及以上的版本,当参照 Gradle传递System Property 配置在隔离环境中(公司内网/局域网)进行开发,在 Android Studio 上右键 “Debug ...”执行单元测试,可能会发生如下报错:

该报错的原因是 Android Studio 没有正确读取我们配置的 robolectric.dependency.repo.url 环境变量,导致无法成功下载,当然也可能是由于高版本不支持 HTTP ,链接地址必须是 HTTPS 导致此问题,这个没有深究。

解决方法是,在命令行执行

确保在当前用户目录下的 .m2 目录下,成功完成 robolectric 需要的全部文件的下载。这样,执行测试用例的时候,就可以从本地获取依赖文件,而不需要再去服务器上获取。

当升级到 Android Studio Flamingo | 2022.2.1 Patch 2 之后,内置的 Java 版本被升级到 Java 17 ,这个 Java 版本执行单元测试,会报错。解决方案参考 Android Studio Flamingo | 2022.2.1 Patch 2 配置Robolectric-3.8/4.3.1/4.5.1/4.6.1单元测试环境

参考链接


发布者