Pierwsza część: Testowanie aplikacji na developer.android.com. Zwróć uwagę, że występują pewne różnice w jak testy z instrumentacją są wykorzystywane w testowaniu platformy.
Podsumowując, test instrumentacji umożliwia wykonanie specjalnego testu.
jak uruchomione za pomocą polecenia am instrument
, gdzie docelowy poziom
proces aplikacji jest ponownie uruchamiany i inicjowany z podstawowym kontekstem aplikacji.
a w maszynie wirtualnej procesu aplikacji uruchamiany jest wątek instrumentacji. Twoje
kod testowy rozpoczyna wykonywanie w tym wątku instrumentacji i jest dostarczany z
instancję Instrumentation
, która zapewnia dostęp do kontekstu aplikacji
i interfejsów API do manipulowania testowanym procesem aplikacji.
Kluczowych pojęć
- instrumentacja musi być zadeklarowana w pakiecie aplikacji, ze znakiem
<instrumentation>
tag umieszczony w tagu<manifest>
w pliku manifestu pakietu aplikacji. - plik manifestu pakietu aplikacji może technicznie zawierać wiele
<instrumentation>
, choć nie są one powszechnie używane w ten sposób. - każdy element
<instrumentation>
musi zawierać:- atrybut
android:name
: powinien to być nazwa podklasyInstrumentation
. który jest dostępny w aplikacji testowej, czyli zwykle w którym używasz biegacza, np.android.support.test.runner.AndroidJUnitRunner
- musi być zdefiniowany atrybut
android:targetPackage
. Jego wartość powinna ustaw na testowany pakiet aplikacji.
- 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 dodajesz zupełnie nowy moduł instrumentacji dla komponentu, zapoznaj się z artykułem
Jeśli dodajesz testy w jednym z wymienionych powyżej miejsc, postępuj zgodnie z dotychczasową konwencją. Jeśli konfigurujesz nowy moduł testowy, postępuj zgodnie z konfiguracja sieci
AndroidManifest.xml
iAndroid.mk
w jednej z lokalizacji powyżejZobacz frameworks/base/core/tests/coretests/ . Te wiersze powodują zainstalowanie dodatkowych aplikacji:
<option name="test-file-name" value="FrameworksCoreTests.apk" /> <option name="test-file-name" value="BstatsTestApp.apk" />
Nie zapomnij oznaczyć testu 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 Testuj w ten sposób:
atest FrameworksCoreTests
W przypadku bardziej złożonych testów użyj Zestaw narzędzi testowych 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 w pakiecie APK
adb shell am instrument -w com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
wszystkich testów w określonym pakiecie Javy
adb shell am instrument -w -e package android.animation \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
wszystkich testów z określonych zajęć
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 emitować wskaźniki wydajności, kod testowy może wywoływać metodę
Instrumentation#sendStatus
w celu wysłania listy par klucz-wartość. Pamiętaj, że:
- mogą być liczbą całkowitą lub zmiennoprzecinkową
- wszystkie wartości nieliczbowe zostaną odrzucone
- Plik APK testowy może zawierać testy funkcjonalne lub testy danych, ale łączenie obu nie jest obecnie obsługiwane.