İlk olarak, Developer.android.com adresindeki Uygulamanızı test edin bölümünü okuyun. Enstrümantasyon testlerinin platform testinde nasıl kullanıldığı konusunda bazı farklılıklar olduğunu unutmayın.
Özet olarak, 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'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 edilen uygulama sürecini manipüle etmek için uygulama içeriğine ve API'lere erişim sağlayan bir Instrumentation
örneği ile sağlanır.
Anahtar kavramlar
- bir enstrümantasyon, uygulama paketi bildiriminin
<manifest>
etiketinin altına yerleştirilmiş bir<instrumentation>
etiketi ile bir uygulama paketinde 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
özniteliği: test uygulamasında yer alan ve genellikle kullanılan test çalıştırıcı olan birInstrumentation
alt sınıfının adı olmalıdır, ör.android.support.test.runner.AndroidJUnitRunner
- bir
android:targetPackage
özniteliği tanımlanmalıdır. Değeri, test edilen uygulama paketine ayarlanmalıdır.
- bir
Adımların özeti
Aşağıda, çerçeve hizmetlerine karşı hermetik testler için ortak hedefler bulunmaktadı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 kuralın ardından. Yeni bir test modülü kuruyorsanız, lütfen yukarıdaki konumlardan birinde
AndroidManifest.xml
veAndroid.mk
kurulumunu izleyin.Örnek için çerçeveler/temel/çekirdek/testler/koretestler/ bölümüne 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 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'deki 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, yakalanmamış herhangi bir özel durum da işlevsel bir arızaya neden olur.
Performans metriklerini yaymak için test kodunuz, anahtar/değer çiftlerinin bir listesini göndermek üzere Instrumentation#sendStatus
çağırabilir. Şuna dikkat etmek önemlidir:
- metrikler tamsayı veya kayan nokta olabilir
- sayısal olmayan tüm değerler atılacaktır
- test apk'niz işlevsel testler veya ölçüm testleri olabilir, ancak ikisinin karıştırılması şu anda desteklenmemektedir