Wie erben wir Testklassen über Android-Bibliotheksmodule?

Ich habe ein Android Studio Projekt mit zwei Bibliotheksmodulen: foo-module und bar-module . Jeder implementiert eine Bibliothek, mit foo-module definieren eine Strategie-Schnittstelle und bar-module abhängig von foo-module und Umsetzung einer solchen Strategie. foo-module hat Instrumentierungstests ( foo-module/src/androidTest/ ), um seinen foo-module/src/androidTest/ zu testen, indem er eine Stub-Strategie-Implementierung verwendet und das bar-module sollte eigene Instrumentationstests haben.

Ich habe eine AbstractTests Klasse in foo-module/src/androidTest/ das macht die meisten der eigentlichen Tests. Ich habe auch eine StubTests Klasse in foo-module/src/androidTest/ das erweitert AbstractTests und implementiert die notwendigen abstract Methoden, um den Testfall abzuschließen (Bereitstellung einer Implementierung der Strategie, etc.). Das alles funktioniert super.

In bar-module/src/androidTest/ ich eine BarStrategyTests Klasse erstellt, die StubTests spiegeln StubTests , aber die im bar-module implementierte Strategie zur Verfügung stellt. Allerdings kann BarStrategyTests nicht sehen, AbstractTests , obwohl ich compile project(':foo-module') in meiner build.gradle Datei, und die wichtigsten (Nicht-Test) Klassen in bar-module kann gut mit der wichtigsten (nicht- Test) Klassen im foo-module . IOW, während die project() abhängigkeit regelmäßigen code verarbeitet, verarbeitet es nicht androidTest/ code. Ich bekomme "Fehler: Paket com.commonsware.foo.test existiert nicht".

Ich habe auch versucht, androidTestCompile project(':foo-module') mit dem gleichen Ergebnis hinzuzufügen.

Was ist das Rezept für die gemeinsame Nutzung von Instrumentierung Test Code zwischen den Modulen?

Vorübergehend kann ich AbstractTests klonen, aber das ist keine tolle Langzeitlösung.

Diese SO-Frage umfasst einen ähnlichen Grund für gewöhnliches Java. Hat jemand versucht, die Optionen in der eine Antwort und bekam sie für Android Instrumentierung Tests arbeiten? Die erste Option (verschieben Sie die gemeinsame Test-Code in noch ein anderes Modul als reguläre Non-Test-Code) scheint plausibel, aber ich habe keine Ahnung, ob die beiden anderen gut funktionieren mit dem com.android.library Plugin statt der java Plugin.

  • Gibt es eine Möglichkeit, Eclipse mit Gradle in Android-Projekt zu integrieren?
  • Issue signing Android Release Build "Fehler beim Lesen des Keystores"
  • Butter Messer - Injizieren auf Android lib
  • Android Studio zeigt Fehler (Missing Translation) nach der Aktualisierung
  • Datei res / drawable / abc_ic_ab_back_material.xml aus Zeichnungsressource ID # 0x7f020016
  • Überprüfen Sie, ob Bibliothek in Android App verwendet wird
  • Android-Abhängigkeiten: apklib vs aar-Dateien
  • Annotationsprozessor und apt konfigurieren gleichwertig
  • One Solution collect form web for “Wie erben wir Testklassen über Android-Bibliotheksmodule?”

    Aufgrund der Tatsache, dass alle Testklassen (Einheit und Instrumentierung) kein Teil eines Moduls sind, einschließlich aar, sind sie nicht über die Abhängigkeit zu diesem Modul verfügbar. Ich habe auch dieses Problem konfrontiert und es durch das Erstellen von test-module gelöst und alle erforderlichen Klassen in sie ( src/main/java ) gesetzt. So können Sie in diesem Fall AbstractTests in diesem Modul verschieben und dieses Modul als androidTestCompile Abhängigkeit verwenden.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.