Prima leggi Testa la tua app su developer.android.com. Tieni presente che ci sono alcune differenze nel modo in cui i test della strumentazione vengono utilizzati nei test della piattaforma.
In sintesi, un test di strumentazione fornisce uno speciale ambiente di esecuzione del test avviato tramite il comando am instrument
, in cui il processo dell'applicazione di destinazione viene riavviato e inizializzato con il contesto dell'applicazione di base e un thread di strumentazione viene avviato all'interno della VM del processo dell'applicazione. Il codice di test avvia l'esecuzione su questo thread di strumentazione e viene fornito con un'istanza di Instrumentation
che fornisce l'accesso al contesto dell'applicazione e alle API per manipolare il processo dell'applicazione in fase di test.
Concetti chiave
- una strumentazione deve essere dichiarata in un pacchetto dell'applicazione, con un tag
<instrumentation>
annidato sotto il tag<manifest>
del manifest del pacchetto dell'applicazione. - un manifest del pacchetto dell'applicazione può tecnicamente contenere più tag
<instrumentation>
, sebbene non sia comunemente usato in questo modo. - ogni
<instrumentation>
deve contenere:- un attributo
android:name
: dovrebbe essere il nome di una sottoclasse diInstrumentation
inclusa nell'applicazione di test, che in genere è il test runner utilizzato, ad esempio:android.support.test.runner.AndroidJUnitRunner
- è necessario definire un attributo
android:targetPackage
. Il suo valore dovrebbe essere impostato sul pacchetto dell'applicazione in prova.
- un attributo
Riepilogo dei passaggi
Di seguito sono elencate le destinazioni comuni per i test ermetici rispetto ai servizi framework:
frameworks/base/core/tests/coretests frameworks/base/services/tests/servicestests
Se stai aggiungendo un modulo di strumentazione nuovo di zecca per il tuo componente, vedi
Seguendo la convenzione esistente se stai aggiungendo test in una delle posizioni sopra. Se stai configurando un nuovo modulo di test, segui la configurazione di
AndroidManifest.xml
eAndroid.mk
in una delle posizioni sopraVedi frameworks/base/core/tests/coretests/ per un esempio. Nota che queste righe installano app extra:
<option name="test-file-name" value="FrameworksCoreTests.apk" /> <option name="test-file-name" value="BstatsTestApp.apk" />
Non dimenticare di contrassegnare il tuo test come
@SmallTest
,@MediumTest
o@LargeTest
Costruisci il modulo di test con m, ad esempio:
m FrameworksCoreTests
Esegui i test:
La soluzione più semplice è usare Atest in questo modo:
atest FrameworksCoreTests
Oppure, per test più complessi, usa l' imbracatura di prova della Trade Federation :
m tradefed-all tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
Se non utilizzi Tradefed, installa ed esegui manualmente i test:
- Installa l'apk generato:
adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
Esegui i test con varie opzioni:
tutti i test nell'apk
adb shell am instrument -w com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
tutti i test in uno specifico pacchetto Java
adb shell am instrument -w -e package android.animation \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
tutti i test in una classe specifica
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
un metodo di prova specifico
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest#testCancel \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
Il tuo test può fare un'affermazione esplicita in caso di superamento o fallimento utilizzando le API JUnit
; inoltre, eventuali eccezioni non rilevate causeranno anche un errore funzionale.
Per generare metriche sulle prestazioni, il codice di test può chiamare Instrumentation#sendStatus
per inviare un elenco di coppie chiave-valore. È importante notare che:
- le metriche possono essere intere o in virgola mobile
- eventuali valori non numerici verranno eliminati
- il tuo apk di test può essere test funzionale o test di metrica, tuttavia la miscelazione di entrambi non è attualmente supportata