Enstrümantasyon testleri

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

Özetle, 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'sinin 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 altındaki uygulama sürecini yönetmek için uygulama bağlamına ve API'lere erişim sağlayan bir Instrumentation örneğiyle sağlanır.

Anahtar kavramlar

  • bir uygulama paketinde, uygulama paketi bildiriminin <manifest> etiketinin altına yerleştirilmiş bir <instrumentation> etiketiyle bir enstrümantasyon bildirilmelidir.
  • bir uygulama paketi bildirimi teknik olarak birden fazla <instrumentation> etiketi içerebilir, ancak bu şekilde yaygın olarak kullanılmaz.
  • her <instrumentation> şunları içermelidir:
    • bir android:name niteliği: genellikle kullanılan test çalıştırıcısı olan, test uygulamasında bulunan 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. Çerçeve hizmetlerine karşı hermetik testlerin ortak hedefleri 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 kurala uyun. Yeni bir test modülü kuruyorsanız lütfen yukarıdaki konumlardan birinde AndroidManifest.xml ve Android.mk kurulumunu takip edin.

  3. Örnek için frameworks/base/core/tests/coretests/ adresine bakın. 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. Testinizi @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'i 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
    
    1. Testleri çeşitli seçeneklerle çalıştırın:

      1. APK'daki 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, JUnit API'lerini kullanarak başarılı veya başarısız olduğunda açık bir iddiada bulunabilir; ayrıca yakalanmayan istisnalar da işlevsel bir arızaya neden olacaktır.

Performans ölçümlerini yayınlamak için test kodunuz, anahtar/değer çiftlerinin bir listesini göndermek üzere Instrumentation#sendStatus çağırabilir. Şunu unutmamak önemlidir:

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