Testy narzędzi

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 podklasy Instrumentation. 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.

Podsumowanie kroków

  1. 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

  2. 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 i Android.mk w jednej z lokalizacji powyżej

  3. Zobacz 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" />
    
  4. Nie zapomnij oznaczyć testu jako @SmallTest, @MediumTest lub @LargeTest

  5. Utwórz moduł testowy w języku m, np.:

    m FrameworksCoreTests
    
  6. Przeprowadzanie testów:

    m tradefed-all
    tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
    
  7. Jeśli nie korzystasz z TradFed, zainstaluj i przeprowadź testy ręcznie:

    1. Zainstaluj wygenerowany plik APK:
    adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
    
    1. Przeprowadź testy z różnymi opcjami:

      1. wszystkie testy w pakiecie APK

        adb shell am instrument -w com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      2. 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
        
      3. 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
        
      4. 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:

  1. mogą być liczbą całkowitą lub zmiennoprzecinkową
  2. wszystkie wartości nieliczbowe zostaną odrzucone
  3. Plik APK testowy może zawierać testy funkcjonalne lub testy danych, ale łączenie obu nie jest obecnie obsługiwane.