Testy narzędzi

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

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 do komponentu dodajesz zupełnie nowy moduł pomiarowy, zapoznaj się z artykułem

  2. 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.xmlAndroid.mk w jednym z tych miejsc:

  3. 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" />
    
  4. Pamiętaj, aby oznaczyć test 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 pliku APK.

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

  1. Dane mogą być liczbami całkowitymi lub zmiennoprzecinkowymi.
  2. wartości niearytmetyczne zostaną odrzucone;
  3. Plik APK testowy może zawierać testy funkcjonalne lub testy danych, ale łączenie obu nie jest obecnie obsługiwane.