Najpierw przeczytaj Przetestuj swoją aplikację na stronie developer.android.com. Należy pamiętać, że istnieją pewne różnice w sposobie wykorzystania testów oprzyrządowania w testowaniu platformy.
Podsumowując, test oprzyrządowania zapewnia specjalne środowisko wykonywania testów uruchamiane za pomocą polecenia am instrument
, w którym docelowy proces aplikacji jest ponownie uruchamiany i inicjowany z podstawowym kontekstem aplikacji, a wątek oprzyrządowania jest uruchamiany wewnątrz maszyny wirtualnej procesu aplikacji. Twój kod testowy rozpoczyna wykonywanie w tym wątku instrumentacji i jest wyposażony w instancję Instrumentation
, która zapewnia dostęp do kontekstu aplikacji i interfejsów API w celu manipulowania testowanym procesem aplikacji.
Kluczowe idee
- instrumentacja musi zostać zadeklarowana w pakiecie aplikacji ze znacznikiem
<instrumentation>
zagnieżdżonym pod znacznikiem<manifest>
manifestu pakietu aplikacji. - manifest pakietu aplikacji może technicznie zawierać wiele znaczników
<instrumentation>
, chociaż nie jest to powszechnie używane w ten sposób. - każde
<instrumentation>
musi zawierać:- atrybut
android:name
: powinna to być nazwa podklasyInstrumentation
zawartej w aplikacji testowej, którą zazwyczaj jest używany program uruchamiający testy, np.:android.support.test.runner.AndroidJUnitRunner
- należy zdefiniować atrybut
android:targetPackage
. Jego wartość powinna być ustawiona na testowany pakiet aplikacji.
- atrybut
Podsumowanie kroków
Poniżej znajdują się typowe miejsca docelowe testów hermetycznych względem usług frameworkowych:
frameworks/base/core/tests/coretests frameworks/base/services/tests/servicestests
Jeśli dodajesz zupełnie nowy moduł oprzyrządowania do swojego komponentu, zobacz
Postępuj zgodnie z istniejącą konwencją, jeśli dodajesz testy do jednej z powyższych lokalizacji. Jeśli konfigurujesz nowy moduł testowy, postępuj zgodnie z konfiguracją
AndroidManifest.xml
iAndroid.mk
w jednej z powyższych lokalizacjiZobacz frameworks/base/core/tests/coretests/ jako przykład. Zwróć uwagę, że te linie instalują dodatkowe aplikacje:
<option name="test-file-name" value="FrameworksCoreTests.apk" /> <option name="test-file-name" value="BstatsTestApp.apk" />
Nie zapomnij oznaczyć swojego testu jako
@SmallTest
,@MediumTest
lub@LargeTest
Zbuduj moduł testowy za pomocą m, np.:
m FrameworksCoreTests
Uruchom testy:
Najprostszym rozwiązaniem jest użycie Atest w następujący sposób:
atest FrameworksCoreTests
Lub w przypadku bardziej złożonych testów użyj uprzęży testowej Federacji Handlowej :
m tradefed-all tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
Jeśli nie korzystasz z Tradefed, zainstaluj ręcznie i uruchom testy:
- Zainstaluj wygenerowaną apkę:
adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
Uruchom testy z różnymi opcjami:
wszystkie testy w aplikacji
adb shell am instrument -w com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
wszystkie testy w ramach określonego pakietu Java
adb shell am instrument -w -e package android.animation \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
wszystkie testy w ramach określonej klasy
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
określoną metodę badania
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest#testCancel \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
Twój test może wyraźnie potwierdzić wynik pozytywny lub niepowodzenie przy użyciu interfejsów API JUnit
; ponadto wszelkie nieprzechwycone wyjątki również spowodują awarię funkcjonalną.
Aby emitować metryki wydajności, kod testowy może wywołać Instrumentation#sendStatus
w celu wysłania listy par klucz-wartość. Ważne jest, aby pamiętać, że:
- metryki mogą być liczbami całkowitymi lub zmiennoprzecinkowymi
- wszelkie wartości inne niż numeryczne zostaną odrzucone
- Twój testowy plik apk może być testem funkcjonalnym lub testem metryk, jednak mieszanie obu nie jest obecnie obsługiwane