Ich habe ein Android Studio-Projekt mit zwei Bibliotheksmodulen: foo-module
und bar-module
. Jede implementiert eine Bibliothek, wobei foo-module
eine Strategie-Schnittstelle definiert und bar-module
abhängig von foo-module
und eine solche Strategie implementiert. foo-module
hat Instrumentierungstests (foo-module/src/androidTest/
), um seinen Kerncode zu testen, unter Verwendung einer Stub-Strategie-Implementierung, und bar-module
sollte seine eigenen Instrumentierungstests haben.Wie übernehmen wir Testklassen in Android-Bibliotheksmodulen?
Ich definierte eine Klasse in foo-module/src/androidTest/
, die meisten der tatsächlichen Tests. Ich habe auch eine StubTests
Klasse in foo-module/src/androidTest/
, die AbstractTests
erweitert und implementiert die notwendigen abstract
Methoden, um den Testfall (Bereitstellung einer Implementierung der Strategie, etc.) zu vervollständigen. Das alles funktioniert großartig.
In bar-module/src/androidTest/
, habe ich eine BarStrategyTests
Klasse, entworfen StubTests
, spiegeln aber die Strategie in bar-module
umgesetzt bieten. kann jedoch nicht sehen, obwohl ich compile project(':foo-module')
in meiner build.gradle
Datei habe, und die Hauptklassen (Nicht-Test) in bar-module
können gut mit den Hauptklassen (Nicht-Test) in foo-module
funktionieren. IOW, während die project()
Abhängigkeit behandelt normalen Code, behandelt es nicht androidTest/
Code. Ich bekomme "Fehler: Paket com.commonsware.foo.test existiert nicht".
Ich habe versucht, auch androidTestCompile project(':foo-module')
, mit dem gleichen Ergebnis.
Wie lautet das Rezept für den Austausch von Instrumentierungstestcode zwischen Modulen?
Vorübergehend kann ich AbstractTests
klonen, aber das ist keine große langfristige Lösung.
This SO question deckt ähnlichen Boden für gewöhnliches Java. Hat jemand die Optionen in the one answer ausprobiert und sie für Android Instrumententests arbeiten lassen? Die erste Option (den üblichen Testcode in einen anderen Modul als normalen Nicht-Testcode zu verschieben) erscheint plausibel, aber ich habe keine Ahnung, ob die anderen beiden gut mit dem com.android.library
Plugin anstelle des java
Plugins funktionieren.
Haben Sie einen Weg gefunden, dies zu erreichen? Ich möchte meine Testklassen auch für die anderen Module zur Verfügung stellen, aber ich habe Schwierigkeiten, die Ressourcen zu teilen. – karate
@karate: Ich verwende den in der angenommenen Antwort beschriebenen Ansatz. – CommonsWare