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

Schreibe einen Kommentar