Öncelikle developer.android.com adresindeki Uygulamanızı test edin başlıklı makaleyi okuyun. Enstrüman testlerinin platform testinde kullanılma biçiminde bazı farklılıklar olduğunu unutmayın.
Özet olarak, enstrümantasyon testi, am instrument komutu aracılığıyla 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 sanal makinesinde bir enstrümantasyon iş parçacığı başlatılır. Test kodunuz bu enstrümasyon iş parçacığında yürütülmeye başlar ve test edilen uygulama sürecini değiştirmek için uygulama bağlamına ve API'lere erişim sağlayan bir Instrumentation örneği sağlanır.
Temel kavramlar
- Uygulama paketinde, uygulama paketi manifestinin
<manifest>etiketi altında iç içe yerleştirilmiş bir<instrumentation>etiketi ile bir enstrümantasyon beyan edilmelidir. - Uygulama paketi manifesti teknik olarak birden fazla
<instrumentation>etiketi içerebilir ancak genellikle bu şekilde kullanılmaz. - Her
<instrumentation>şunu içermelidir:android:nameözelliği: Test uygulamasına dahil edilenInstrumentationsınıfının alt sınıfının adıdır.Bu sınıf 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
Çerçeve hizmetlerine yönelik hermetik testlerin yaygın hedeflerini aşağıda bulabilirsiniz:
frameworks/base/core/tests/coretests frameworks/base/services/tests/servicestestsBileşeniniz için yepyeni bir enstrümantasyon modülü ekleyecekseniz
Yukarıdaki konumlardan birine test ekleyecekseniz mevcut sözleşmeyi uygulayın. Yeni bir test modülü oluşturuyorsanız lütfen yukarıdaki konumlardan birinde
AndroidManifest.xmlveAndroid.mkkurulumunu uygulayın.Örnek için frameworks/base/core/tests/coretests/ bölümüne bakın. 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ınTest modülünü m ile derleyin. Örneğin:
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 Trade Federation test donanımını kullanın:
m tradefed-all tradefed.sh run template/local_min --template:map test=FrameworksCoreTestsTradefed kullanmıyorsanız 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ıftaki 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'lerini kullanarak başarılı veya başarısız olduğu konusunda net bir beyan yapabilir. Ayrıca, yakalanmayan istisnalar da işlevsel bir hataya neden olur.
Test kodunuz, performans metriklerini yayınlamak için Instrumentation#sendStatus'u çağırarak anahtar/değer çiftlerinin listesini gönderebilir. Şunları unutmayın:
- metrikler tam sayı veya kayan nokta olabilir
- Sayısal olmayan tüm değerler atılır.
- Test APK'nız işlevsel testler veya metrik testleri olabilir ancak şu anda ikisinin karıştırılması desteklenmiyor