Ho un progetto Android Studio con due moduli di libreria: foo-module
e bar-module
. Ciascuno implementa una libreria, con foo-module
che definisce un'interfaccia di strategia e bar-module
a seconda di foo-module
e implementando tale strategia. foo-module
ha test di strumentazione (foo-module/src/androidTest/
) per testare il proprio codice core, utilizzando un'implementazione della strategia di stub, e bar-module
dovrebbe avere i propri test di strumentazione.In che modo ereditiamo le classi di test nei moduli della libreria Android?
Ho definito una classe AbstractTests
in foo-module/src/androidTest/
che esegue la maggior parte dei test effettivi. Ho anche una classe StubTests
in foo-module/src/androidTest/
che si estende AbstractTests
e implementa i metodi necessari abstract
per completare il test case (fornendo un'implementazione della strategia, ecc.). Tutto funziona alla grande.
In bar-module/src/androidTest/
, ho creato una classe BarStrategyTests
, progettata per il mirroring StubTests
, ma fornire la strategia implementata in bar-module
. Tuttavia, BarStrategyTests
non può vedere AbstractTests
, anche se ho compile project(':foo-module')
nel mio file build.gradle
e le classi principali (non test) in bar-module
possono funzionare correttamente con le classi principali (non test) in foo-module
. IOW, mentre la dipendenza project()
gestisce il codice normale, non gestisce il codice androidTest/
. Ottengo "errore: il pacchetto com.commonsware.foo.test non esiste".
Ho provato anche ad aggiungere androidTestCompile project(':foo-module')
, con lo stesso risultato.
Qual è la ricetta per condividere il codice di test della strumentazione tra i moduli?
Temporaneamente, posso clonare AbstractTests
, ma questa non è una soluzione a lungo termine.
This SO question copre un terreno simile per Java ordinario. Qualcuno ha provato le opzioni in the one answer e le ha fatte funzionare per i test di strumentazione Android? La prima opzione (spostare il codice di test comune in un altro modulo come normale codice non di test) sembra plausibile, ma non ho idea se gli altri due funzioneranno bene con il plugin com.android.library
invece del plug-in java
.
hai trovato un modo per raggiungere questo? Voglio rendere le mie classi di test disponibili anche per gli altri moduli, ma ho difficoltà a condividere le risorse. – karate
@karate: sto utilizzando l'approccio delineato nella risposta accettata. – CommonsWare