2011-10-25 17 views
5

Sto tentando di eseguire la strumentazione di Android con il test di Junit utilizzando la riga di comando. Sto usando il seguente comando e sta lanciando il test giusto.Esegui il test Junit utilizzando la strumentazione di Android su un pacchetto con classi nell'ordine specifico

adb shell am instrument -w com.android.foo/android.test.InstrumentationTestRunner 

Il mio pacchetto progetto Android ha le seguenti file sorgente Java (in ordine alfabetico)

com.android.foo

ActivityTest

ContactsTest

LaunchTest

SendTest

Quando eseguo il test utilizzando il comando sopra menzionato, il test inizia ad eseguire ActivityTest e così via. Questo non è quello che voglio, voglio che esegua LaunchTest prima seguito da ContactTest, SendTest e ActivityTest. Ho provato ad utilizzare

adb shell am instrument -w -e class com.android.foo.LaunchTest,com.android.foo.ContactTest com.android.foo/android.test.InstrumentationTestRunner 

ma mi dà un errore può essere perché non sto usando classe TestCase nel mio codice, ma invece il mio LaunchTest e altri estende ActivityInstrumentationTestCase2.

qualsiasi aiuto è apprezzato.

+1

Dal momento che siete interessati a eseguire i test in un ordine particolare, essa implica che dipendono l'uno dall'altro. I test delle unità dovrebbero essere scritti in modo che ciascuno sia completamente indipendente e l'ordine in cui vengono eseguiti non abbia importanza. – elevine

+0

@ Noble6 Aggiornamento: Android Studio per eseguire la testcase http://goo.gl/ac06C0 e demo per creare testcase http://goo.gl/bQFlmU – nitesh

risposta

6

ho finalmente capito di lavorare utilizzando il seguente comando:

adb shell am instrument -e class com.android.foo.LaunchTest -w com.android.foo/android.test.InstrumentationTestRunner 
+0

Da quale directory è stato eseguito questo comando, la stessa directory di LaunchTest? –

0

Se l'ordine in cui vengono eseguiti i test è importante, i test sono fragili e devono essere sottoposti a refactoring. Significa che dipendono l'uno dall'altro e, idealmente, i test sono indipendenti. Di solito la maggior parte dei test sono così indipendenti e ben definiti che li chiamiamo Test unitari.

Un inizio comune per rompere questo tipo di dipendenza consiste nell'utilizzare i metodi setup() e teardown() nel TestCase. Qui puoi prepararti all'esecuzione dei test e a ripulire eventuali modifiche apportate dai test.


Detto questo, il android.test.InstrumentationTestRunner non ha un'opzione per Reording vostre suite di test. Questo può tuttavia essere fatto in due modi.

1) è possibile creare la propria implementazione di android.test.InstrumentationTestRunner che esegue alcuni ordini speciali. Questo ti darà la massima flessibilità, ma potrebbe richiedere più tempo.

2) am instrument può assumere il nome della classe come argomento in modo da poter eseguire i test in ordine ma eseguendo più comandi (eventualmente combinati in uno script bash). Questo viene fatto aggiungendo gli argomenti "-e classe [nome classe del test]".


Inoltre, v'è un errore nel modo in cui si sta eseguendo i test:

adb shell am instrument -w -e class com.android.foo.LaunchTest,com.android.foo.ContactTest com.android.foo/android.test.InstrumentationTestRunner 

tenta di correre per due classi.Per fare questo è necessario cambiare a questo:

adb shell am instrument -w -e class com.android.foo.LaunchTest com.android.foo/android.test.InstrumentationTestRunner 
adb shell am instrument -w -e class com.android.foo.ContactTest com.android.foo/android.test.InstrumentationTestRunner 
+0

Grazie, sto già usando setup() e teardown() ma il il fatto è che LaunchTest avvia l'app e registra il client, quindi se non è il primo test per eseguire tutti gli altri test avrà esito negativo poiché lo schermo del dispositivo verrà appeso alla schermata di registrazione. Quando provo a usare -e classe ottengo un errore impossibile trovare informazioni sulla strumentazione. –

+0

È possibile specificare solo una classe con "-e classe". Forse puoi calcolare il test di registrazione ed eseguire la registrazione durante l'installazione() – spatulamania

+0

Sto solo specificando 1 classe ma sto ancora ottenendo il fallimento. Se non menzioni alcuna classe, il test viene eseguito. –

Problemi correlati