İlk önce uygulamanızı geliştirici.android.com'da test edin bölümünü okuyun. Platform testinde 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ı ile başlatıldığı ve uygulama süreci VM içinde bir enstrümantasyon dizisinin başlatıldığı am instrument
komutu aracılığıyla başlatıldığı gibi özel bir test yürütme ortamı sağlar. Test kodunuz bu enstrümantasyon dizisinde yürütülmeye başlar ve test edilen uygulama sürecini işlemek için uygulama bağlamına ve API'lere erişim sağlayan bir Instrumentation
örneği ile sağlanır.
Anahtar kavramlar
- uygulama paketi
<manifest>
etiketi altında yuvalanmış bir<instrumentation>
etiketi ile bir uygulama paketinde bir enstrümantasyon bildirilmelidir. - bir uygulama paketi bildirimi, bu şekilde yaygın olarak kullanılmasa da teknik olarak birden çok
<instrumentation>
etiketi içerebilir. - her
<instrumentation>
şunları içermelidir:- bir
android:name
özniteliği: genellikle kullanılan test çalıştırıcısı olan test uygulamasında bulunanInstrumentation
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.
- bir
Adımların özeti
Ç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.
Yukarıdaki konumlardan birine testler ekliyorsanız, mevcut sözleşmeyi takip edin. Yeni bir test modülü kuruyorsanız, lütfen yukarıdaki konumlardan birinde
AndroidManifest.xml
veAndroid.mk
kurulumunu takip edin.Örnek için çerçeveler/taban/çekirdek/testler/çekirdek testleri/ konusuna 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" />
@SmallTest
,@MediumTest
veya@LargeTest
olarak işaretlemeyi unutmayınız.Test modülünü m ile oluşturun, örneğin:
m FrameworksCoreTests
Testleri çalıştırın:
En basit çözüm, Atest'i şu şekilde kullanmaktır:
atest FrameworksCoreTests
Veya daha karmaşık testler için Trade Federation test Harness'ı kullanın:
m tradefed-all tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
Tradefed kullanmıyorsanız, testleri manuel olarak kurun ve ç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 içindeki tüm testler
adb shell am instrument -w com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
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
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'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 yaymak için test kodunuz, bir anahtar/değer çiftleri listesi göndermek için Instrumentation#sendStatus
çağırabilir. Şuna dikkat etmek önemlidir:
- metrikler tamsayı veya kayan nokta olabilir
- sayısal olmayan değerler atılacak
- test apk'nız işlevsel testler veya ölçüm testleri olabilir, ancak her ikisinin de karıştırılması şu anda desteklenmemektedir.