Testy oprzyrządowania

Przeczytaj najpierw przetestować 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ądowanie zapewnia specjalny środowiska wykonanie testu jako uruchomiony przez am instrument komendy, gdzie kierowane proces ponownego uruchomienia aplikacji i inicjowane z podstawowego kontekstu aplikacji, a gwint oprzyrządowanie jest uruchamiany wewnątrz procesu aplikacji VM. Kod rozpoczyna wykonanie testu na tego wątku oprzyrządowanie i jest wyposażony w Instrumentation instancji, który zapewnia dostęp do kontekstu aplikacji i interfejsów API do manipulowania proces aplikacji w ramach testu.

Kluczowe idee

  • instrumentacji muszą być zadeklarowane w pakiecie aplikacji, z <instrumentation> tag zagnieżdżony pod <manifest> tagu manifestu pakietu aplikacji.
  • manifest pakiet aplikacja może zawierać wiele technicznie <instrumentation> tagi, choć nie jest to powszechnie stosowany w ten sposób.
  • każdy <instrumentation> musi zawierać:
    • android:name atrybutu: powinna być nazwą podklasa Instrumentation , który jest zawarty w aplikacji testowej, która jest zazwyczaj biegacz test, który jest używany, np android.support.test.runner.AndroidJUnitRunner
    • android:targetPackage atrybut musi być zdefiniowana. 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, należy wykonać konfigurację AndroidManifest.xml i Android.mk w jednej z powyższych lokalizacji

  3. Patrz RAMAMI / zasada / Rdzeń / / testów 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 zaznaczyć swój test 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
    

    Wskazówka: użyć adb shell pm list instrumentation znaleźć instrumentacje wewnątrz apk właśnie zainstalowanej

    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żna zrobić wyraźne stwierdzenie o przejściu lub nie używając JUnit API; ponadto wszelkie nieprzechwycone wyjątki spowodują również awarię funkcjonalną.

Emitować wskaźniki wydajności, kod test może wywołać Instrumentation#sendStatus wysłać listę 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