Öncelikle developer.android.com'daki Uygulamanızı test etme başlıklı makaleyi okuyun. Platform testinde enstrümantasyon testlerinin kullanımında bazı farklılıklar olduğunu unutmayın.
Özetle, bir enstrümantasyon testi, am instrument komutuyla başlatılan özel bir test yürütme ortamı sağlar. Bu ortamda, hedeflenen uygulama işlemi yeniden başlatılır ve temel uygulama bağlamıyla başlatılır. Ayrıca, uygulama işlemi VM'sinde bir enstrümantasyon iş parçacığı başlatılır. Test kodunuz bu enstrümantasyon iş parçacığında yürütülmeye başlar ve test edilen uygulama bağlamına ve uygulama sürecini değiştirmeye yönelik API'lere erişim sağlayan bir Instrumentation örneğiyle birlikte verilir.
Temel kavramlar
- Bir uygulama paketinde, uygulama paketi manifestinin
<manifest>etiketi altında iç içe yerleştirilmiş bir<instrumentation>etiketiyle bir enstrüman beyan edilmelidir. - Bir uygulama paketi manifest dosyası teknik olarak birden fazla
<instrumentation>etiketi içerebilir ancak bu şekilde kullanılması yaygın değildir. - Her
<instrumentation>şunları içermelidir:android:nameözelliği: Bu özellik, test uygulamasında yer alanInstrumentationalt sınıfının adı olmalıdır.Bu genellikle kullanılan test çalıştırıcısıdır. Örneğin:android.support.test.runner.AndroidJUnitRunnerandroid:targetPackageözelliği tanımlanmalıdır. Değeri, test edilen uygulama paketi olarak ayarlanmalıdır.
Adımların özeti
Aşağıda, çerçeve hizmetlerine karşı hermetik testler için yaygın hedefler verilmiştir:
frameworks/base/core/tests/coretests frameworks/base/services/tests/servicestestsBileşeniniz için yepyeni bir enstrümantasyon modülü ekliyorsanız
Yukarıdaki konumlardan birine test ekliyorsanız mevcut kurala uyun. Yeni bir test modülü oluşturuyorsanız lütfen yukarıdaki konumlardan birinde
AndroidManifest.xmlveAndroid.mkkurulumunu yapın.Örnek için bkz. frameworks/base/core/tests/coretests/. 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" />Testinizi
@SmallTest,@MediumTestveya@LargeTestolarak işaretlemeyi unutmayın.Test modülünü m ile oluşturun (ör. m):
m FrameworksCoreTestsTestleri çalıştırın:
En basit çözüm, Atest'i aşağıdaki gibi kullanmaktır:
atest FrameworksCoreTestsDaha karmaşık testler için Ticaret Federasyonu Test Harness'ını kullanın:
m tradefed-all tradefed.sh run template/local_min --template:map test=FrameworksCoreTestsTradefed kullanılmıyorsa testleri manuel olarak yükleyip çalıştırın:
- Oluşturulan APK'yı yükleyin:
adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apkTestleri çeşitli seçeneklerle çalıştırın:
APK'daki tüm testler
adb shell am instrument -w com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunnerBelirli bir Java paketindeki tüm testler
adb shell am instrument -w -e package android.animation \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunnerBelirli 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.AndroidJUnitRunnerbelirli 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'leri kullanarak geçme veya kalma konusunda açık bir iddiada bulunabilir. Ayrıca, yakalanmayan tüm istisnalar da işlevsel bir hataya neden olur.
Performans metrikleri yayınlamak için test kodunuz, anahtar/değer çiftlerinin listesini göndermek üzere
Instrumentation#sendStatus
işlevini çağırabilir. Şunları unutmayın:
- Metrikler tam sayı veya kayan nokta olabilir.
- Sayısal olmayan tüm değerler silinir.
- Test APK'nız işlevsel testler veya metrik testleri olabilir ancak ikisinin birlikte kullanılması şu anda desteklenmemektedir.