Robolectric mit Gradle: Ressourcen nicht gefunden
Ich versuche mein Robolectric tests zusammen mit dem neuen Gradle Android-build-system, aber ich bin stecken geblieben auf den Zugriff auf die Ressourcen von meinem main-Projekt.
Aufgeteilt ich die build-in zwei separate Projekte zur Vermeidung von Konflikten zwischen den java
und die android
gradle-plugins, also die Verzeichnis-Struktur sieht in etwa wie diese:
.
├── 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
Meine build.gradle
im test/
sieht derzeit ungefähr so aus:
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'
...
}
Den bösen classpath Hack ermöglicht mir den Zugriff auf alle Klassen von meinem wichtigsten Projekt, außer für R
existiert, als .class
- Datei in das build-Verzeichnis, wirft aber dieser Fehler während der compileTestJava
Aufgabe:
/.../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
Es muss einen besseren Weg zu führen Robolectric tests mit dem neuen build-system, richtig?
(Vollständigen Quellcode der app)
InformationsquelleAutor der Frage passy | 2013-05-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich lief über das gleiche Thema und dies ist, was ich kam mit. Statt der Erstellung eines separaten Projekts für die tests habe ich eine Quelle legen Sie für die Robolectric tests und fügte hinzu, eine neue Aufgabe, die "check" davon abhängen würde. Mit einigen der code von deiner Frage, hier sind die relevanten bits des (Arbeits -) build-Datei:
Habe ich meine Abhängigkeiten block darauf hin, dass in Ordnung für mich, um das aufstehen und gehen, ich hatte zu wiederholen alle meine
compile
Abhängigkeiten in meine customtestLocal
Quelle eingestellt.Läuft
gradle testLocal
baut und betreibt nur die tests innerhalb vonsrc/test/java
während der Ausführunggradle check
führt diese Prüfungen zusätzlich zu denen in der Standard-android-instrumentTest Quelle eingestellt.Hoffe, das hilft!
InformationsquelleAutor der Antwort user2457888
Update:
Jake Wharton hat gerade angekündigt, die
gradle-android-test-plugin
. Sie finden ihn unter https://github.com/square/gradle-android-test-pluginScheint es ziemlich gestrafft, vor allem, wenn Sie planen, zu verwenden
robolectric
.Alte Antwort Unten
Den
robolectric-plugin
sieht vielversprechend aus.Die Probe
build.gradle
- Datei, die Sie bereitstellen, ist :Es scheint nicht zu funktionieren mit dem Android-Gradle-plugin, version 0.5, aber vielleicht wird es bald.
InformationsquelleAutor der Antwort Saad Farooq