Ö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 alanInstrumentation
alt 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.AndroidJUnitRunner
android: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/servicestests
Bileş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.xml
veAndroid.mk
kurulumunu 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
,@MediumTest
veya@LargeTest
olarak işaretlemeyi unutmayın.Test modülünü m ile oluşturun (ör. m):
m FrameworksCoreTests
Testleri çalıştırın:
En basit çözüm, Atest'i aşağıdaki gibi kullanmaktır:
atest FrameworksCoreTests
Daha karmaşık testler için Ticaret Federasyonu Test Harness'ını kullanın:
m tradefed-all tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
Tradefed 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.apk
Testleri ç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.AndroidJUnitRunner
Belirli bir Java paketindeki tüm testler
adb shell am instrument -w -e package android.animation \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
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
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'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.