Enstrümantasyon Testleri

Önce, Developer.android.com adresinde uygulamanızı test edin bölümünü okuyun. Platform testinde enstrümantasyon testlerinin nasıl kullanıldığı konusunda bazı farklılıklar olduğunu unutmayın.

Özet olarak, bir enstrümantasyon testi, hedeflenen uygulama sürecinin yeniden başlatıldığı ve temel uygulama bağlamıyla başlatıldığı ve uygulama süreci VM içinde bir enstrümantasyon iş parçacığının başlatıldığı am instrument komutu aracılığıyla başlatılan özel bir test yürütme ortamı sağlar. Test kodunuz, bu enstrümantasyon iş parçacığında yürütmeye başlar ve test edilen uygulama sürecini yönetmek için uygulama bağlamına ve API'lere erişim sağlayan bir Instrumentation örneği ile sağlanır.

Anahtar kavramlar

  • bir araç, uygulama paketi bildiriminin <manifest> etiketinin altına yerleştirilmiş bir <instrumentation> etiketi ile bir uygulama paketinde bildirilmelidir.
  • bir uygulama paketi bildirimi teknik olarak birden çok <instrumentation> etiketi içerebilir, ancak bu şekilde yaygın olarak kullanılmaz.
  • her <instrumentation> şunları içermelidir:
    • bir android:name özniteliği: test uygulamasında yer alan ve tipik olarak kullanılan test çalıştırıcısı olan Instrumentation alt sınıfının adı olmalıdır, örneğin: android.support.test.runner.AndroidJUnitRunner
    • bir android:targetPackage niteliği tanımlanmalıdır. Değeri, test edilen uygulama paketine ayarlanmalıdır.

Adımların özeti

  1. Aşağıda, çerçeve hizmetlerine karşı hermetik testler için ortak hedefler bulunmaktadır:

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

    Bileşeniniz için yepyeni bir enstrümantasyon modülü ekliyorsanız, bkz.

  2. Yukarıdaki konumlardan birine test ekliyorsanız, mevcut kuralı takip edin. Yeni bir test modülü Android.mk , lütfen yukarıdaki konumlardan birinde AndroidManifest.xml ve Android.mk kurulumunu takip edin

  3. Örnek için çerçeveler / temel / çekirdek / testler / ortak testler / bakın . Bu satırların fazladan uygulamaları yüklediğini unutmayın:

    <option name="test-file-name" value="FrameworksCoreTests.apk" />
    <option name="test-file-name" value="BstatsTestApp.apk" />
    
  4. @SmallTest , @MediumTest veya @LargeTest olarak işaretlemeyi unutmayın.

  5. Test modülünü m ile oluşturun, örneğin:

    m FrameworksCoreTests
    
  6. Testleri çalıştırın:

    m tradefed-all
    tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
    
  7. Tradefed kullanmıyorsanız, testleri manuel olarak kurun ve çalıştırın:

    1. Oluşturulan apk'yi yükleyin:
    adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
    

    İpucu: Yeni yüklenen apk içindeki enstrümantasyonları bulmak için adb shell pm list instrumentation kullanırsınız

    1. Testleri çeşitli seçeneklerle çalıştırın:

      1. apk'deki tüm testler

        adb shell am instrument -w com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      2. belirli bir Java paketi altındaki tüm testler

        adb shell am instrument -w -e package android.animation \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      3. belirli bir sınıftaki tüm testler

        adb shell am instrument -w -e class \
          android.animation.AnimatorSetEventsTest \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      4. belirli bir test yöntemi

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

Testiniz, JUnit API'lerini kullanarak geçme veya kalma konusunda açık bir onaylama yapabilir; ek olarak, yakalanmayan istisnalar da işlevsel bir arızaya neden olacaktır.

Performans ölçümlerini yaymak için, test kodunuz Anahtar / değer çiftlerinin bir listesini göndermek için Instrumentation#sendStatus çağırabilir. Şunlara dikkat etmek önemlidir:

  1. metrikler tam sayı veya kayan nokta olabilir
  2. sayısal olmayan değerler atılacak
  3. test apk'niz işlevsel testler veya ölçüm testleri olabilir, ancak ikisinin karıştırılması şu anda desteklenmemektedir