robolectric 依赖库下载各种踩坑。。。
1.gradlew test 运行单元测试用例报错如下:
org.apache.maven.artifact.resolver.MultipleArtifactsNotFoundException
com.tencent.next.MainActivityTest > testActivity FAILED
org.apache.tools.ant.BuildException
Caused by: org.apache.maven.artifact.resolver.MultipleArtifactsNotFoundException
增加–info参数查看具体出错信息,提示依赖库文件下载失败,要不连接超时,一直卡在70%的进度
com.tencent.next.MainActivityTest > testActivity STANDARD_OUT
[WARNING] Unable to get resource \'org.robolectric:android-all:jar:5.0.0_r2-robolectric-1\' from repository central (http://repo1.maven.org/maven2): Error transferring file: Connection timed out: conne
ct
com.tencent.next.MainActivityTest > testActivity STANDARD_ERROR
Downloading: org/robolectric/shadows-core-v21/3.1.4/shadows-core-v21-3.1.4.jar from repository sonatype at https://oss.sonatype.org/content/groups/public/
Error transferring file: Connection timed out: connect
com.tencent.next.MainActivityTest > testActivity STANDARD_OUT
[WARNING] Unable to get resource \'org.robolectric:shadows-core-v21:jar:3.1.4\' from repository sonatype (https://oss.sonatype.org/content/groups/public/): Error transferring file: Connection timed out
: connect
解决过程:
-
** 手动下载,放到对应目录下 **
C:\\Users\\用户名.gradle\\caches\\modules-2\\files-2.1\\org.robolectric ,可是依旧找不到,还check sha值是不是写错了,难受香菇; -
然后在build.gradle里配置依赖,让gradle去下载,可以下载回来, C:\\Users\\用户名.gradle\\caches\\modules-2\\files-2.1\\org.robolectric目录下也有了对应jar包,运行依然报连接超时等错误,看起来robolectric显然不认~/.gradle/的账。
得出结论:
robolectric依赖的本地目录 与 gradle依赖的本地目录不相同。 -
robolectric的依赖库,本地放在C:\\Users{用户名}.m2\\repository\\org\\robolectric,但我一直用gradle,没有配置maven。想试图搞一下,可是这样做有弊端,其他同事也会遇到我的问题,那每个人都需要配置,成本太高。放弃
-
之前用ant编译robolectric单元测试时候,自己下载好jar包,指定库的目录就好,顺着这个思路去查,找到了解决方法。
-
在build.gradle目录配置如下
testOptions { unitTests.all { systemProperty \'robolectric.offline\', \'true\' systemProperty \'robolectric.dependency.dir\', \'C:\\\\Users\\\\cicichang\\\\.gradle\\\\caches\\\\modules-2\\\\files-2.1\\\\org.robolectric\\\\android-all\\\\5.0.0_r2-robolectric-1\\\\7c63cd7aeb55d63e3e208b77882831c7ac588ed8\' } }
robolectric.offline//设置为true 关闭jar包的动态获取
robolectric.dependency.dir//在offline模式的时候,指定一个文件夹来包含运行时依赖
robolectric.enabledSdks//逗号隔开的sdklevel或者名字列表是对进程可用的,在运行的时候只测试在list中指定的sdk。默认是所有sdk都是可用的
robolectric.dependency.repo.id//为运行时依赖设置maven依赖库的id(默认是sonatype)
robolectric.dependency.repo.url//设置maven库url(默认https://oss.sonatype.org/content/groups/public/)
rebolectric.logging.enabled//设置为true打开默认logging
6.运行gradlw test,运行成功
附录:
1.在build.gradle里配置
dependencies {
testImplementation \"org.robolectric:robolectric:$rootProject.ext.robolectricVersion\"
testImplementation \"org.robolectric:robolectric-annotations:$rootProject.ext.robolectricVersion\"
testImplementation:org.robolectric:android-all:5.0.0_r2-robolectric-1\'
testImplementation \"org.robolectric:robolectric-annotations:$rootProject.ext.robolectricVersion\"
testImplementation \"org.robolectric:shadows-support-v4:$rootProject.ext.robolectricVersion\"
}
其中robolectricVersion在根目录的build.gradle里配置
ext {
robolectricVersion = \'3.1.4\'
}
注意:testImplementation:org.robolectric:android-all:5.0.0_r2-robolectric-1’如果不在这里指定,通过@Config(constants = BuildConfig.class , sdk = 21) 也可以指定依赖的sdk版本号。
参考:
https://www.jianshu.com/p/3ccf867784fc
http://robolectric.org/
继续阅读与本文标签相同的文章
MySQL数据库总结
-
功能强大且实用的6个在线网站,好东西,值得分享给大家!
2026-05-18栏目: 教程
-
微软谷歌增强合作 共同推进Chromium的现代化表单控件
2026-05-18栏目: 教程
-
深耕电子行业 帮助客户拿终端订单
2026-05-18栏目: 教程
-
怎样才能做好项目进度管理
2026-05-18栏目: 教程
-
《网安动态》多因子身份验证的五个趋势;账户安全的未来:一个
2026-05-18栏目: 教程
