2014-12-06 8 views
8

Ich füge zwei Module in meinem Android Studio Projekt:Wie Code in androidTest Verzeichnis eines anderen Moduls verwenden

app-base 
| 
|----src 
     |____androidTest 
       |________MyTestBase.java   

app 
| 
|----src 
     |____androidTest 
       |________MyTest.java 

Einige gemeinsame Testklasse in app-Basis androidTest definiert sind, und werden in app'androidTest verwendet.

Ich habe versucht, den folgenden Code in der App build.gradle hinzuzufügen:

evaluationDependsOn(':app-base') 

    compile project(':app-base') 

    androidTestCompile project(':app-base') 

I umfassen sowohl app-Basis und App ist in settings.gradle, die Ausgabe von gradlew Projekte haben:

Kein Kompilierfehler auf diese Weise, aber wenn ich MyTest in IDE starte, heißt es, dass Klasse MyTestBase nicht gefunden wird.

Wissen Sie, was los ist? Irgendwelche Ideen werden geschätzt. Vielen Dank.

+0

Haben Sie eine entsprechende definieren * settings.gradle * Datei? Was ist der Output von 'Gradlew-Projekten'? Weitere Informationen zum Einrichten von Multiprojekt-Builds finden Sie in der [Gradle-Dokumentation] (http://www.gradle.org/docs/current/userguide/multi_project_builds.html). –

+0

Eine Abhängigkeit vom Testcode eines anderen Projekts ist definitiv atypisch. Sie müssen explizit auf die Projekte testCompile configuraonon angewiesen sein. Versuchen Sie 'androidTestCompile-Projekt (Pfad: ': app-base', Konfiguration: 'androidTestCompile')'. –

Antwort

3

Ich empfehle Ihnen die folgende Strategie: Erstellen Sie ein neues Modul test-utils und setzen MyTestBase.java in den Hauptquellen dieses Moduls.

test-utils 
| 
|----src 
     |____main 
      |________MyTestBase.java 

Dann fügen Sie diese test-utils als Test Abhängigkeit in allen Modulen, wo es erforderlich ist,

androidTestCompile project(':test-utils') 
+0

Ja, ich denke immer über die Lösung nach. Ich denke, das funktioniert. Aber dann muss ich ein neues Modul für nur ein paar Klassen hinzufügen. Das ist nicht akzeptabel. Aber danke irgendwie :) – maoruilin

+0

IMHO ein neues Modul ist keine große Sache. Alternative Lösungen sind: Duplizieren Sie Code in jedem Modul oder definieren Sie mehrere Quellverzeichnisse für androidTest mit einem relativen Pfad wie: '../ app-base/src/androidTest/java /' (IMHO beide sind schlimmer) – ben75

+0

Ich habe diesen Ansatz versucht aber es konnte nicht funktionieren. in der "instrumentantiontest" Modulgruppendatei habe ich 'compile' Anweisungen verwendet, da sich die Quellen in 'main' befinden. Alles wird kompiliert, aber beim Ausführen aller Instrumentierungstests kann es keinen Test finden. Wenn ich speziell eine Testmethode ruiniere, die Testfehler mit einer ClassNotFound-Ausnahme –

Verwandte Themen