İ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 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 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.
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
veAndroid.mk
kurulumunu takip edin.Ö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" />
Testinizi
@SmallTest
,@MediumTest
veya@LargeTest
olarak işaretlemeyi unutmayın.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 Ticaret Federasyonu test Donanımını kullanın:
m tradefed-all tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
Tradefed'i kullanmıyorsanız testleri manuel olarak kurun ve çalıştırın:
- Oluşturulan apk'yi 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 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 yayınlamak için test kodunuz, anahtar/değer çiftlerinin bir listesini göndermek üzere Instrumentation#sendStatus
çağırabilir. Şunu unutmamak önemlidir:
- metrikler tam sayı veya kayan nokta olabilir
- sayısal olmayan tüm değerler atılacak
- test apk'nız işlevsel testler veya ölçüm testleri olabilir, ancak her ikisinin karıştırılması şu anda desteklenmemektedir