Araç testleri

Öncelikle developer.android.com adresindeki Uygulamanızı test edin başlıklı makaleyi okuyun. Enstrümantasyon testlerinin platform testinde kullanılma biçiminde bazı farklılıklar olduğunu unutmayın.

Özetle, bir araç testi, am instrument komutu aracılığıyla başlatılan özel bir test yürütme ortamı sağlar. Burada hedeflenen uygulama işlemi yeniden başlatılıp temel uygulama bağlamıyla başlatılır ve uygulama işlemi sanal makinesinde bir araç iş parçacığı başlatılır. Test kodunuz bu enstrümasyon iş parçacığında yürütülmeye başlar ve test edilen uygulama sürecini değiştirmek için uygulama bağlamına ve API'lere erişim sağlayan bir Instrumentation örneği sağlanır.

Temel kavramlar

  • Bir araç, uygulama paketinde uygulama paketi manifestinin <manifest> etiketi altında iç içe yerleştirilmiş bir <instrumentation> etiketiyle tanımlanmalıdır.
  • Uygulama paketi manifesti teknik olarak birden fazla <instrumentation> etiketi içerebilir ancak genellikle bu şekilde kullanılmaz.
  • Her <instrumentation> şunu içermelidir:
    • android:name özelliği: Test uygulamasında yer alan bir Instrumentation alt sınıfının adı olmalıdır. Bu alt sınıf, genellikle kullanılan test çalıştırıcısıdır, örneğin: android.support.test.runner.AndroidJUnitRunner
    • android:targetPackage özelliği tanımlanmalıdır. Değeri, test edilen uygulama paketi olarak ayarlanmalıdır.

Adımların özeti

  1. Çerçeve hizmetlerine yönelik hermetik testlerin yaygın hedeflerini aşağıda bulabilirsiniz:

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

    Bileşeniniz için yepyeni bir enstrümantasyon modülü ekleyecekseniz

  2. Yukarıdaki konumlardan birine test ekliyorsanız mevcut kural uygulanır. Yeni bir test modülü oluşturuyorsanız lütfen yukarıdaki konumlardan birinde AndroidManifest.xml ve Android.mk ayarlarını uygulayın.

  3. Örnek için frameworks/base/core/tests/coretests/ bölümüne bakın. Bu satırların ek 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.Ör.:

    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 yükleyip çalıştırın:

    1. Oluşturulan APK'yı 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ğu konusunda net bir beyan yapabilir. Ayrıca, yakalanmayan istisnalar da işlevsel bir hataya neden olur.

Test kodunuz, performans metriklerini yayınlamak için anahtar/değer çiftlerinin listesini göndermek üzere Instrumentation#sendStatus'i çağırabilir. Şunları unutmayın:

  1. metrikler tam sayı veya kayan nokta olabilir
  2. sayısal olmayan tüm değerler silinecek
  3. test apk'niz işlevsel test veya metrik testi olabilir, ancak ikisinin birlikte kullanılması şu anda desteklenmemektedir.