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. Poniżej znajdziesz typowe miejsca docelowe testów hermetycznych względem usług platformy:

    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. Zgodnie z istniejącą konwencją, jeśli dodajesz testy do jednego z lokalizacji powyżej. 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. Przeprowadź testy:

    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. Przeprowadzaj 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 jednoznacznie potwierdzić zaliczenie lub niepowodzeniem za pomocą interfejsów API JUnit. cale wszystkie niewyłapane wyjątki również spowodują problemy z działaniem funkcji.

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. Twój testowy plik APK może być testem funkcjonalnym lub testowym, jednak miksowanie obu tych elementów nie jest obecnie obsługiwane