Najpierw przeczytaj artykuł Testowanie aplikacji na stronie developer.android.com. Zwróć uwagę na pewne różnice w sposobie korzystania z testów narzędziowych w testowaniu platformy.
Podsumowując, testowanie pomiarów zapewnia specjalne środowisko testowe uruchamiane za pomocą polecenia am instrument
, w którym docelowy proces aplikacji jest ponownie uruchamiany i inicjowany z podstawowym kontekstem aplikacji, a wątek pomiarów jest uruchamiany w ramach maszyny wirtualnej procesu aplikacji. Kod testowy rozpoczyna wykonywanie na tym wątku pomiarowym i otrzymuje instancję Instrumentation
, która zapewnia dostęp do kontekstu aplikacji i interfejsów API umożliwiających manipulowanie procesem aplikacji poddawanym testom.
Kluczowych pojęć
- instrumentacja musi być zadeklarowana w pakiecie aplikacji za pomocą tagu
<instrumentation>
zagnieżdżonego pod tagiem<manifest>
w pliku manifestu pakietu aplikacji. - Plik manifestu pakietu aplikacji może teoretycznie zawierać wiele tagów
<instrumentation>
, ale nie jest to powszechna praktyka. - Każdy element
<instrumentation>
musi zawierać:- atrybut
android:name
: powinien on zawierać nazwę podklasyInstrumentation
, która jest uwzględniona w aplikacji testowej, która jest zwykle używanym testem, np.:android.support.test.runner.AndroidJUnitRunner
- Musisz zdefiniować atrybut
android:targetPackage
. Jego wartość powinna być ustawiona na pakiet aplikacji poddawany testom.
- atrybut
Podsumowanie kroków
Oto typowe miejsca docelowe testów hermetycznych w przypadku usług frameworka:
frameworks/base/core/tests/coretests frameworks/base/services/tests/servicestests
Jeśli do komponentu dodajesz zupełnie nowy moduł pomiarowy, zapoznaj się z artykułem
Zgodnie z dotychczasową konwencją, jeśli dodajesz testy do jednej z powyższych lokalizacji. Jeśli konfigurujesz nowy moduł testowy, wykonaj czynności opisane w sekcji
AndroidManifest.xml
iAndroid.mk
w jednym z tych miejsc:Przykład: frameworks/base/core/tests/coretests/. Pamiętaj, że te wiersze instalują dodatkowe aplikacje:
<option name="test-file-name" value="FrameworksCoreTests.apk" /> <option name="test-file-name" value="BstatsTestApp.apk" />
Pamiętaj, aby oznaczyć test jako
@SmallTest
,@MediumTest
lub@LargeTest
Utwórz moduł testowy w języku m, np.:
m FrameworksCoreTests
Przeprowadzanie testów:
Najprostszym rozwiązaniem jest użycie polecenia Atest w ten sposób:
atest FrameworksCoreTests
W przypadku bardziej złożonych testów użyj testu Harness federacji handlowej:
m tradefed-all tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
Jeśli nie korzystasz z TradFed, zainstaluj i przeprowadź testy ręcznie:
- Zainstaluj wygenerowany plik APK:
adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
Przeprowadź testy z różnymi opcjami:
wszystkie testy pliku APK.
adb shell am instrument -w com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
wszystkich testów w ramach konkretnego pakietu Javy,
adb shell am instrument -w -e package android.animation \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
wszystkie testy w ramach konkretnego kursu
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
konkretnej metody testowania,
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest#testCancel \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
Test może wyraźnie stwierdzić, czy test się udał, czy nie, korzystając z interfejsów API JUnit
. Nieprzechwycone wyjątki również spowodują błąd funkcjonalny.
Aby przesyłać dane dotyczące wydajności, kod testowy może wywoływać metodę Instrumentation#sendStatus
w celu wysłania listy par klucz-wartość. Pamiętaj, że:
- Dane mogą być liczbami całkowitymi lub zmiennoprzecinkowymi.
- wartości niearytmetyczne zostaną odrzucone;
- Plik APK testowy może zawierać testy funkcjonalne lub testy danych, ale łączenie obu nie jest obecnie obsługiwane.