Instrumentierungstests

Lesen Sie zuerst Testen Sie Ihre App auf developer.android.com. Beachten Sie, dass es einige Unterschiede bei der Verwendung von Instrumentierungstests bei Plattformtests gibt.

Zusammengefasst stellt eine Instrumentierung Test eine spezielle Testausführungsumgebung wie über den ins Leben gerufen am instrument Befehl ein , wobei der gezielte Anwendung Prozess ist mit grundlegendem Anwendungskontext neu gestartet und initialisiert und eine Instrumentierung Thread innerhalb des Bewerbungsprozesses VM gestartet. Ihr Testcode beginnt die Ausführung an diesem Instrumentierungs Gewinde und wird mit einer vorgesehenen Instrumentation Instanz, die den Anwendungsprozess unter Test zu manipulieren , den Zugriff auf den Anwendungskontext und APIs zur Verfügung stellt.

Schlüssel Konzepte

  • eine Instrumentierung muss in einem Anwendungspaket deklariert werden, mit einem <instrumentation> -Tag unter dem verschachtelten <manifest> Tag des Anwendungspaket manifestiert.
  • ein Anwendungspaket manifest technisch mehrfach enthält <instrumentation> Tags, wenn es nicht häufig in dieser Weise verwendet wird .
  • jede <instrumentation> muss enthalten:
    • ein android:name - Instrumentation android.support.test.runner.AndroidJUnitRunner android:name Attribut: Es sollte der Name einer Unterklasse von sein Instrumentation , die in der Testanwendung enthalten ist, die in der Regel die Testläufer ist, der verwendet wird ist, zB: android.support.test.runner.AndroidJUnitRunner
    • ein android:targetPackage - android:targetPackage Attribut definiert werden müssen. Sein Wert sollte auf das zu testende Anwendungspaket festgelegt werden.

Zusammenfassung der Schritte

  1. Im Folgenden sind gängige Ziele für hermetische Tests gegen Framework-Dienste aufgeführt:

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

    Wenn Sie ein brandneues Instrumentierungsmodul für Ihre Komponente hinzufügen, lesen Sie

  2. Befolgen Sie die bestehende Konvention, wenn Sie Tests an einem der oben genannten Speicherorte hinzufügen. Wenn Sie ein neues Testmodul einrichten, finden Sie in der Einrichtung folgen AndroidManifest.xml und Android.mk in einem der Orte oben

  3. Siehe Frameworks / base / Kern / Tests / coretests / für ein Beispiel. Beachten Sie, dass diese Zeilen zusätzliche Apps installieren:

    <option name="test-file-name" value="FrameworksCoreTests.apk" />
    <option name="test-file-name" value="BstatsTestApp.apk" />
    
  4. Vergessen Sie nicht , Ihren Test als markieren @SmallTest , @MediumTest oder @LargeTest

  5. Bauen Sie das Testmodul mit m, zB:

    m FrameworksCoreTests
    
  6. Führen Sie die Tests durch:

    m tradefed-all
    tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
    
  7. Wenn Sie Tradefed nicht verwenden, installieren Sie die Tests manuell und führen Sie sie aus:

    1. Installieren Sie die generierte apk:
    adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
    

    Tipp: Sie verwenden adb shell pm list instrumentation die Instrumentierungen in der apk gerade installiert zu finden

    1. Führen Sie die Tests mit verschiedenen Optionen aus:

      1. alle Tests in der apk

        adb shell am instrument -w com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      2. alle Tests unter einem bestimmten Java-Paket

        adb shell am instrument -w -e package android.animation \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      3. alle Tests unter einer bestimmten Klasse

        adb shell am instrument -w -e class \
          android.animation.AnimatorSetEventsTest \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      4. eine bestimmte Testmethode

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

Ihr Test kann eine explizite Behauptung auf Pass machen oder nicht mit JUnit APIs; Darüber hinaus führen alle nicht abgefangenen Ausnahmen ebenfalls zu einem Funktionsfehler.

Auszusenden , Performance - Metriken, Ihre Testcode kann anrufen Instrumentation#sendStatus eine Liste von Schlüssel-Wert - Paare auszusenden. Es ist wichtig zu beachten, dass:

  1. Metriken können Ganzzahl oder Gleitkomma sein
  2. alle nicht numerischen Werte werden verworfen
  3. Ihre Test-APK kann entweder aus Funktionstests oder Metriktests bestehen, jedoch wird das Mischen von beidem derzeit nicht unterstützt