android evaluater_android – 带有test.R.java的Robolectric

我在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”的内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值