API21 で robolectric 3.0 を使用するライブラリ プロジェクトを持っていcom.android.tools.build:gradle:1.3.1
ます。
テストリソースを( の下のようにsrc/androidTest/res/...
)、つまりcom.mypackage.test.R.java
(com.mypackage.R.java
本番用ではなく)robolectric テストで使用したい。
私がこれまでに持っているもの:
ディレクトリ構造は
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 で正常にコンパイルされるようになりました。
ただし、${project.buildDir}/intermediates/assets/androidTest/debug
以前は${project.buildDir}/intermediates/assets/debug
. androidTest
私の疑いでは、リソース ファイルも(ビルド バリアント?) ディレクトリの下に移動されているため、robo もリソース ファイルを見つけられないのではないかと考えています。
2 つの質問: 1) これを行うためのより良い方法はありますか? 2) 存在しない場合、資産ファイルを探す場所を robolectric に伝えるにはどうすればよいですか?
私は試してみましたが@Config(assetDir="build/intermediates/assets/androidTest/debug")
、@Config(assetDir="../build/intermediates/assets/androidTest/debug")
役に立ちませんでした。