运行测试时,Robolectric 2.x依赖的jar正在下载

时间:2013-08-13 12:37:00

标签: robolectric

如何下​​载所有robolectric依赖jar,以避免运行时下载并使其脱机?我需要使用Robolectric.buildActivity(),它是2.x.x版本的一部分。

对此有何看法?

4 个答案:

答案 0 :(得分:2)

从Robolectric 2.4开始,他们添加了两个系统属性,允许您告诉Robolectric测试运行器使用依赖项的本地副本。请参阅Configuring Robolectric页面。

设置为:

  • robolectric.offline - 设置为true以禁用运行时获取jar
  • robolectric.dependency.dir - 处于脱机模式时,指定包含运行时依赖关系的文件夹

确定需要复制到dependencyDir的文件的一种方法是运行gradlew testDebug -i(或者可能使用-d)并观察输出以查看在运行时下载哪些jar文件。然后将它们复制到构建计算机上的已知位置。 (另一种查看所需文件的方法是查看SdkConfig.java并获取其中提到的依赖项jar及其依赖项。)

对于当前的Robolectric 3.0-rc2,这些是它需要的文件:

  • 辅助功能测试框架-1.0.jar
  • Android的全5.0.0_r2-robolectric-1.jar
  • ICU4J-53.1.jar
  • JS​​ON-20080701.jar
  • robolectric的注解-3.0-rc2.jar
  • robolectric资源-3.0-rc2.jar
  • robolectric-utils的-3.0-rc2.jar
  • 阴影核-3.0-rc2.jar
  • sqlite4java-0.282.jar
  • tagsoup-1.2.jar
  • VTD-XML的2.11.jar

将这些文件复制到已知位置,例如说/home/jenkins/robolectric-files/,然后使用以下内容编辑build.gradle

afterEvaluate {
    project.tasks.withType(Test) {
        systemProperties.put('robolectric.offline', 'true')
        systemProperties.put('robolectric.dependency.dir', '/home/jenkins/robolectric-files/')
    }
}

答案 1 :(得分:2)

以下是我为org.robolectric:robolectric:3.0

解决的问题

https://gist.github.com/kotucz/60ae91767dc71ab7b444

我将运行时依赖项下载到build文件夹中并配置测试以使用它 - 请参阅设置系统属性。

答案 2 :(得分:1)

我也有这个问题,并找到了原因是org.robolectric.Testrunner创建了一个org.robolectric.MavenCentral对象,该对象使用Internet-url(Robolectric 2.3-release)声明了一个Maven存储库。脱机版本将无法访问该URL。

在我的情况下,我需要使用Maven存储库代理,因此我用我的本地Maven存储库代理替换了指向http://oss.sonatype.org的url。这意味着将RobolectricTestRunner子类化为org.robolectric.MyRobolectricTestRunner,并为其创建自定义MavenCentral对象,并覆盖RobolectricTestRunner引用其私有MAVEN_CENTRAL对象的方法。

RobolectricTestRunnerMavenCentral的源代码可在Robolectric的Github页面上找到。

答案 3 :(得分:0)

我使用了Robolectric版本3.0,并且从我的存储库下载了依赖jar,而不是sonatype。