2014-10-30 8 views
9

Ich möchte Ressourcen einschließen, die nur zum Testen kompiliert werden.Konfigurieren von res srcDirs für androidTest sourceSet

Ich habe folgendes in meiner app Modul build.gradle Datei:

android { 

    ... 

    sourceSets { 
     androidTest { 
      java.srcDirs = ['src/androidTest/java'] 
      res.srcDirs = ['src/androidTest/res'] 
     } 
    } 
} 

Der Java SRCDIRS Pfad korrekt ist, aber wenn ich versuche, eine Ressource aus dem res Verzeichnis in androidTest zu bekommen, die Ressource‘ t gefunden werden.

Wie kann ich Ressourcen im androidTest-Verzeichnis haben, die nur für Tests enthalten sind?

Antwort

13

Es stellt sich heraus, dass Sie nichts aus der Standarddatei build.gradle ändern müssen.

Der Trick ist, dass die automatisch generierte R.java Datei für Ressourcen in androidTest unterschiedlich ist.

Wenn die Import-Anweisung für R irgendwo in der Hauptquelle Satz wie folgt aussieht:

import com.mycompany.myappname.R; 

die Import-Anweisung für R in einer Testdatei soll wie folgt aussehen:

import com.mycompany.myappname.test.R; 
+4

Funktioniert auch für mich, aber nur in InstrumentationTestCase. Wenn Sie dies in einem AndroidTestCase verwenden, sind die Ressourcen-IDs nicht identisch und ich habe ein zufälliges PNG-Bild anstelle der angeforderten XML-Datei erhalten. – Oyvind

11

Wenn Sie eine haben Build-Typ, wo Sie die applicationIdSuffix eingestellt haben, werden Ihre src/androidTest/res Ressourcen bei <applicationId><applicationIdSuffix>.test.R sein !!!!! SEHR WICHTIG !!!

heißt

applicationId "com.example.my.app" 

buildTypes { 
    debug { 
     applicationIdSuffix ".debug" 
    } 
} 

haben einige Ressourcen in src/androidTest/res? Sie sind nicht bei com.example.my.app.test! Wenn Sie den Debug-Build ausführen, sind sie bei com.example.my.app.debug.test.R !!!!

+0

Vielen Dank! –

+0

Woran denken Sie, dass OP eine ** applicationIdSuffix ** gesetzt hat? –

Verwandte Themen