Enstrümantasyon Testleri

İlk okuma test edin uygulamanızı developer.android.com üzerinde. Platform testinde enstrümantasyon testlerinin nasıl kullanıldığı konusunda bazı farklılıklar olduğunu unutmayın.

Özetle, bir enstrüman testi üzerinden başlatılan gibi özel bir test yürütme ortamı sağlar am instrument hedeflenen uygulama işlemi yeniden başlatılır ve temel uygulama bağlamında ile başlatılır komutu ve bir enstrüman iplik uygulama işlemi VM içinde başlatılır. Test kodu, bu alet parçacığı üzerinde icra başlar ve ile sağlanan Instrumentation , test edilen uygulama işlemini yönetmek için bir uygulama bağlamında ve API erişim sağlar örneği.

Anahtar kavramlar

  • Bir enstrümantasyon bir ile, bir uygulama paketine beyan edilmelidir <instrumentation> altında iç içe etiketi <manifest> uygulama paketi manifestin etiketi.
  • bir uygulama paketinin tezahür teknik olarak birden içerebilir <instrumentation> yaygın bu şekilde kullanılmadığı da, etiketleri.
  • Her <instrumentation> içermelidir:
    • Bir android:name özelliği: bu bir alt sınıfı adı olmalıdır Instrumentation kullanılmakta olan Test kanal, örneğin, tipik olarak test uygulamasında, içinde dahildir: android.support.test.runner.AndroidJUnitRunner
    • Bir android:targetPackage nitelik tanımlanmalıdır. Değeri, test edilen uygulama paketine ayarlanmalıdır.

Adımların özeti

  1. Çerçeve hizmetlerine karşı hermetik testler için ortak hedefler aşağıdadı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 testler ekliyorsanız, mevcut sözleşmeyi takip edin. Eğer yeni bir test modülü kuruyorsanız, kurulumunu takip edin AndroidManifest.xml ve Android.mk yerleri yukarıdaki birinde

  3. Bkz / çerçeveler / baz / çekirdek / testler / coretests bir örnek için. Bu satırların ekstra uygulamalar yüklediğini unutmayın:

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

  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'yı yükleyin:
    adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
    

    İpucu: Kullanmak adb shell pm list instrumentation sadece yüklü apk'de içindeki instrumentations bulmak için

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

      1. apk içindeki 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ıf altındaki 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 geçişte açık bir iddiayı yapmak veya kullanarak başarısız olabilir JUnit API'leri; ayrıca, yakalanmayan istisnalar da işlevsel bir arızaya neden olacaktır.

Performans ölçümlerini yayarlar için çağırabilir test kodu Instrumentation#sendStatus anahtar-değer çiftlerinin listesini göndermek için. Şuna dikkat etmek önemlidir:

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