私は新しいGradle Androidビルドシステムと一緒にRobolectricテストを実行しようとしていますが、私はメインプロジェクトのリソースにアクセスできません。Robolectric with Gradle:リソースが見つかりません
ディレクトリ構造はおおよそ次のようになりますので、私は、java
とandroid
のGradleプラグインの間の競合を回避するために、2つの別々のプロジェクトにビルドを分割:
.
├── build.gradle
├── settings.gradle
├── mainproject
│ ├── build
│ │ ├── classes
│ │ │ └── debug
│ ├── build.gradle
│ └── src
│ └── main
│ ├── AndroidManifest.xml
│ └── ...
└── test
├── build.gradle
└── src
└── test
└── java
└── ...
└── test
├── MainActivityTest.java
├── Runner.java
├── ServerTestCase.java
└── StatusFetcherTest.java
をtest/
マイbuild.gradle
は現在、次のようになります。
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.stanfy.android:gradle-plugin-java-robolectric:2.0'
}
}
apply plugin: 'java-robolectric'
repositories {...}
javarob {
packageName = 'com.example.mainproject'
}
test {
dependsOn ':mainproject:build'
scanForTestClasses = false
include "**/*Test.class"
// Oh, the humanity!
def srcDir = project(':mainproject').android.sourceSets.main.java.srcDirs.toArray()[0].getAbsolutePath()
workingDir srcDir.substring(0, srcDir.lastIndexOf('/'))
}
project(':mainproject').android.sourceSets.main.java.srcDirs.each {dir ->
def buildDir = dir.getAbsolutePath().split('/')
buildDir = (buildDir[0..(buildDir.length - 4)] + ['build', 'classes', 'debug']).join('/')
sourceSets.test.compileClasspath += files(buildDir)
sourceSets.test.runtimeClasspath += files(buildDir)
}
dependencies {
testCompile group: 'com.google.android', name: 'android', version: '4.1.1.4'
testCompile group: 'org.robolectric', name: 'robolectric', version: '2.0-alpha-3'
...
}
R
を除いて、私のメインプロジェクトのすべてのクラスにアクセスすることができます。.class
ビルドディレクトリ内のファイルが、compileTestJava
作業中にこのエラーが発生します:
/.../MainActivityTest.java:16: error: cannot find symbol
final String appName = activity.getResources().getString(R.string.app_name);
^
symbol: variable string
location: class R
1 error
:test:compileTestJava FAILED
は右、新しいビルドシステムとRobolectricテストを実行するためのより良い方法があるに違いありませんか?
私はこれがうまくいくとは思わない。robolectricには、gradleプラグインの機能とはうまくいかない実際のリソース(依存関係を持つプロジェクトに拡張する)をどこで見つけるかについての、他の内部的なものがあります。 私はRobolectric開発者と協力して互換性を持たせる必要があります。それは私のやるべきことのリストです。 –
入力ありがとう、@ Xav。 – passy
新しいAndroid Studio ideでgradoを使ってrobolectricを実行する方法はまだありますか? – Imanol