我在API21上有一个使用robolectric 3.0的库项目,com.android.tools.build:grad:1.3.1.

我想在robolectric测试中使用测试资源(好像在src / androidTest / res / …下),即com.mypackage.test.R.java(而不是用于生产的com.mypackage.R.java).

到目前为止我所拥有的:

目录结构是

src/

main/

java

res

test/

java

// no res here because it's not picked up

androidTest/

res // picked up by androidTest build variant to generate test.R.java

然后在build.gradle中:

android {

compileSdkVersion 21

buildToolsVersion = "22.0.1"

defaultConfig {

minSdkVersion 15

targetSdkVersion 21

}

sourceSets {

test {

java {

srcDir getTestRJavaDir()

}

}

}

}

def private String getTestRJavaDir(){

def myManifestRoot = (new XmlParser()).parse("${project.projectDir}/src/main/AndroidManifest.xml")

def myPackageNamespace = myManifestRoot.@package

def myPackagePath = myPackageNamespace.replaceAll("\\.", "/")

return "${project.buildDir}/generated/source/r/androidTest/debug/${myPackagePath}/test"

}

afterEvaluate { project ->

[tasks.compileDebugUnitTestSources, tasks.compileReleaseUnitTestSources]*.dependsOn("compileDebugAndroidTestSources")

}

我的测试现在使用test.R.java成功编译.

但是,在运行时,它们会失败,因为robolectric现在无法找到我的资产文件,因为它们现在位于${project.buildDir} / intermediates / assets / androidTest / debug中,而之前它们位于${project.buildDir} / intermediateiates /资产/调试.我怀疑机器人也无法找到资源文件,因为它们也被移动到androidTest(build variant?)目录下.

所以有两个问题:1)有更好的方法吗? 2)如果没有,我怎么能告诉robolectric在哪里寻找资产文件?

我试过@Config(assetDir =“build / intermediates / assets / androidTest / debug”)和@Config(assetDir =“../ build / intermediates / assets / androidTest / debug”)无济于事.

解决方法:

您可以创建一个自定义的roboletric测试运行器,如:

public class CustomRobolectricGradleTestRunner extends RobolectricGradleTestRunner {

public CustomRobolectricGradleTestRunner(Class> klass) throws InitializationError {

super(klass);

}

// Fix for the NotFound error with openRawResource()

@Override

protected AndroidManifest getAppManifest(Config config) {

String manifest = "src/main/AndroidManifest.xml";

String res = String.format("../app/build/intermediates/res/merged/%1$s/%2$s", BuildConfig.FLAVOR, BuildConfig.BUILD_TYPE);

String asset = "src/test/assets";

return new AndroidManifest(Fs.fileFromPath(manifest), Fs.fileFromPath(res), Fs.fileFromPath(asset));

}

}

在变量资产中,您可以定义类似“../build/intermediates/assets/androidTest/debug”的内容

android evaluater_android – 带有test.R.java的Robolectric相关推荐

  1. Android项目clean之后R.java文件丢失解决办法

    2019独角兽企业重金招聘Python工程师标准>>> Android项目clean之后R.java文件丢失解决办法 1.  Android Tools -> fix proj ...

  2. Android Studio中打开R.java文件的方法

    1 R.java文件简介 Android Studio中的R.java文件自动收录当前应用中所有的资源,并根据这些资源建立响应的ID,可以把R.java当成Android应用的资源字典.R.java文 ...

  3. android开发中出现R.java was modified manually! Reverting to generated version!问题的解决方法...

    这种问题是说R.java文件没有起作用,开发中R.java文件是很重要的,所以解决此类问题按照下面的方法即可: 进入 eclipse后选择菜单栏中的 Projects ,然后选择 clean 这样就把 ...

  4. 关于android开发添加菜单XML文件之后无法在R.java中生成ID的问题

    因为和同学分开做的android软件,现在想整合他做的界面部分,于是拷贝了res和src文件夹的文件,其中包括一个res.menu文件夹中的XML.但是每次将该文件导入到工程总无法自动在R.java中 ...

  5. 一种导致android开发时无法生成R.java文件的原因

    为什么80%的码农都做不了架构师?>>>    现象 gen文件夹下没有出现R.java文件 .java文件中无法自动引入应用的R,只能 import android.R 工程右键 ...

  6. Android下HelloWorld项目的R.java文件介绍

    R.java文件介绍 HelloWorld工程中的R.java文件 package com.android.hellworld; public final class R {     public s ...

  7. Android工程中R.java文件的重新生成——注意资源文件的错误

    一.如果二或三步骤还是不能生成R.java中内容,一般是XML文件有错,或者xml引用的资源文件找不到,用排除法删除xml后执行二或者三的步骤. 二. 在Android中使用开源代码或者自己开发项目的 ...

  8. android 学习 解决R.java不能自动生成问题,编译时adb.exe 找不到问题

    android 学习 解决R.java不能自动生成问题,编译时adb.exe 找不到问题 参考文章: (1)android 学习 解决R.java不能自动生成问题,编译时adb.exe 找不到问题 ( ...

  9. Android Apk瘦身方案1——R.java文件常量内联

    R.java 文件结构 R.java 是自动生成的,它包含了应用内所有资源的名称到数值的映射关系.先创建一个最简单的工程,看看 R.java 文件的内容: R文件生成的目录为app/build/gen ...

最新文章

  1. 个php反序列化漏洞,PHP反序列化漏洞学习(一)
  2. 更改android AVD模拟器创建路径位置的方法
  3. asp.net gridview删除 获取到第一行第一列的单元格内容_VBA中的常用单元格引用方式...
  4. 狄利克雷卷积_一些狄利克雷卷积性质的证明
  5. R开发(part1)--R语言知识体系结构
  6. dll 和 lib--初级
  7. 多个java文件编译并打成jar包经典方法
  8. Carthage 安装与使用
  9. ichat模块schedule模块运行遇到的错误
  10. Hadoop集群搭建(六):hadoop配置namenode服务
  11. 【Python表白小程序】七夕表白神器(赶紧收藏起来)
  12. 如何提高服务器并发能力
  13. 什么软件适合团队协作?团队协作工具排行
  14. 电子计算机没电了,主板电池没电了怎么办 主板电池没电会出现什么情况
  15. win8局域网访问其他计算机名,win8.1局域网找不到其他电脑怎么办
  16. linux显示mem进行排序,linux下top命令显示详解
  17. 阿里的敏捷组织和中台策略有何不同?
  18. 编程的教学方法和学习方法的思考
  19. android修改自动背光,android 背光控制
  20. 1218学习笔记——kvm上vm+vtpm(IMA)

热门文章

  1. Sql语法---DDL
  2. (转)@ContextConfiguration注解说明
  3. this.options[selectedIndex]的使用
  4. android各种权限及说明
  5. 不同版本浏览器前端标准兼容性对照表以及CORS解决跨域和CSRF安全问题解决方案
  6. Linux环境编程--fflush(stdout)有什么作用
  7. squid命中率分析参数注释
  8. 获取GridView中的某列值
  9. Visual Studio 2005 Web Deployment Projects版本不同引发的问题
  10. Spring Mock单元测试