Testy oprzyrządowania

Najpierw przeczytaj Przetestuj swoją aplikację na developer.android.com. Zwróć uwagę, że istnieją pewne różnice w sposobie używania testów oprzyrządowania w testowaniu platformy.

Podsumowując, test oprzyrządowania zapewnia specjalne środowisko wykonywania testów uruchamiane za pomocą polecenia am instrument , w którym docelowy proces aplikacji jest ponownie uruchamiany i inicjowany z podstawowym kontekstem aplikacji, a wątek oprzyrządowania jest uruchamiany w maszynie wirtualnej procesu aplikacji. Kod testowy rozpoczyna wykonywanie w tym wątku Instrumentacji i jest dostarczany z wystąpieniem Instrumentation , które zapewnia dostęp do kontekstu aplikacji i interfejsów API w celu manipulowania testowanym procesem aplikacji.

Kluczowe idee

  • Instrumentacja musi być zadeklarowana w pakiecie aplikacji z tagiem <instrumentation> zagnieżdżonym w tagu <manifest> manifestu pakietu aplikacji.
  • manifest pakietu aplikacji może technicznie zawierać wiele <instrumentation> , chociaż nie jest to powszechnie używane w ten sposób.
  • każde <instrumentation> musi zawierać:
    • atrybut android:name : powinna to być nazwa podklasy Instrumentation zawartej w aplikacji testowej, która zazwyczaj jest używanym programem uruchamiającym testy, np.: android.support.test.runner.AndroidJUnitRunner
    • musi być zdefiniowany atrybut android:targetPackage . Jego wartość powinna być ustawiona na testowany pakiet aplikacji.

Podsumowanie kroków

  1. Poniżej znajdują się typowe kierunki testów hermetycznych względem usług ramowych:

    frameworks/base/core/tests/coretests
    frameworks/base/services/tests/servicestests
    

    Jeśli dodajesz zupełnie nowy moduł oprzyrządowania dla swojego komponentu, zobacz

  2. Postępuj zgodnie z istniejącą konwencją, jeśli dodajesz testy do jednej z powyższych lokalizacji. Jeśli konfigurujesz nowy moduł testowy, postępuj zgodnie z konfiguracją AndroidManifest.xml i Android.mk w jednej z powyższych lokalizacji

  3. Zobacz frameworks/base/core/tests/coretests/ dla przykładu. Zwróć uwagę, że te wiersze instalują dodatkowe aplikacje:

    <option name="test-file-name" value="FrameworksCoreTests.apk" />
    <option name="test-file-name" value="BstatsTestApp.apk" />
    
  4. Nie zapomnij oznaczyć swojego testu jako @SmallTest , @MediumTest lub @LargeTest

  5. Zbuduj moduł testowy za pomocą m, np.:

    m FrameworksCoreTests
    
  6. Uruchom testy:

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

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

      1. wszystkie testy w apk

        adb shell am instrument -w com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      2. wszystkie testy w ramach konkretnego pakietu Java

        adb shell am instrument -w -e package android.animation \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      3. wszystkie testy w ramach określonej klasy

        adb shell am instrument -w -e class \
          android.animation.AnimatorSetEventsTest \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      4. specyficzna metoda badawcza

        adb shell am instrument -w -e class \
          android.animation.AnimatorSetEventsTest#testCancel \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        

Twój test może wykonać jawną asercję przy zaliczeniu lub niepowodzeniu przy użyciu interfejsów API JUnit ; ponadto wszelkie nieprzechwycone wyjątki spowodują również awarię funkcjonalną.

Aby wyemitować metryki wydajności, kod testowy może wywołać Instrumentation#sendStatus w celu wysłania listy par klucz-wartość. Należy pamiętać, że:

  1. metryki mogą być liczbą całkowitą lub zmiennoprzecinkową
  2. wszelkie wartości nienumeryczne zostaną odrzucone
  3. Twój testowy apk może być albo testami funkcjonalnymi, albo testami metrykowymi, jednak mieszanie obu nie jest obecnie obsługiwane