我在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. 用C语言解“BCD解密”问题
  2. SpringMVC怎么获取前台传来的数组
  3. (转)ADC的滤波方法
  4. 谷歌Colab也搞“超级会员”,普通会员云GPU被降级,想用高端得加钱
  5. 关于AIX lv 4k offset问题初步了解
  6. boost::weak_from_raw相关的测试程序
  7. [BUUCTF-pwn]——get_started_3dsctf_2016
  8. ssm(Spring+Spring mvc+mybatis)Spring配置文件——applicationContext.xml
  9. 我对 ASP.NET Web API 的随想
  10. Scala-trait
  11. C#中反射的使用(How to use reflect in CSharp)(3)Emit的使用
  12. python绘制一棵樱花树
  13. spark sortBy sortByKey实战详解
  14. 网易社招面试几轮?网易java社招面试题分享
  15. OpenGl读取导入3D模型并且添加鼠标移动旋转显示
  16. 零基础爬取堆糖网图片(一)
  17. echarts的边框图片之切图(重要)以及公共面板样式的制作
  18. DFS实现传教士野人渡河问题
  19. 【3】SALSA-基于HIC数据辅助组装长读长组装结果
  20. 阿里云服务器和 hexo 博客实战

热门文章

  1. 第二周期的第一次站立会议
  2. Ubuntu终端命令行缩短显示路径
  3. POJ 3258:River Hopscotch (最大化最小值)
  4. 身份证号码对应地区-官方措辞:行政区划代码
  5. oracle RAC的VIP和scan
  6. Apache关掉Etag和Last-Modified的方法
  7. http header头设置反向代理不缓存
  8. PHP feof() 函数读文件的使用
  9. 关于Dreamweaver乱码问题的解决方案
  10. Spring源码分析【0】-框架的基础:继承和接口调用链