Pertama, baca Uji aplikasi Anda di developer.android.com. Perhatikan bahwa ada beberapa perbedaan dalam cara uji instrumentasi digunakan dalam pengujian platform.
Singkatnya, uji instrumentasi menyediakan lingkungan eksekusi uji khusus yang diluncurkan melalui perintah am instrument
, tempat proses aplikasi yang ditargetkan dimulai ulang dan diinisialisasi dengan konteks aplikasi dasar, dan utas instrumentasi dimulai di dalam VM proses aplikasi. Kode pengujian Anda memulai eksekusi pada utas instrumentasi ini dan dilengkapi dengan instance Instrumentation
yang memberikan akses ke konteks aplikasi dan API untuk memanipulasi proses aplikasi yang sedang diuji.
Konsep kunci
- instrumentasi harus dideklarasikan dalam paket aplikasi, dengan tag
<instrumentation>
bersarang di bawah tag<manifest>
dari manifes paket aplikasi. - manifes paket aplikasi mungkin secara teknis berisi beberapa tag
<instrumentation>
, meskipun tidak umum digunakan dengan cara ini. - setiap
<instrumentation>
harus berisi:- atribut
android:name
: harus merupakan nama subkelasInstrumentation
yang disertakan dalam aplikasi pengujian, yang biasanya merupakan runner pengujian yang sedang digunakan, misalnya:android.support.test.runner.AndroidJUnitRunner
- atribut
android:targetPackage
harus ditentukan. Nilainya harus disetel ke paket aplikasi yang diuji.
- atribut
Ringkasan langkah-langkah
Di bawah ini adalah tujuan umum untuk uji hermetis terhadap layanan framework:
frameworks/base/core/tests/coretests frameworks/base/services/tests/servicestests
Jika Anda menambahkan modul instrumentasi baru untuk komponen Anda, lihat
Mengikuti konvensi yang ada jika Anda menambahkan pengujian ke salah satu lokasi di atas. Jika Anda menyiapkan modul pengujian baru, ikuti penyiapan
AndroidManifest.xml
danAndroid.mk
di salah satu lokasi di atasLihat frameworks/base/core/tests/coretests/ sebagai contoh. Perhatikan baris-baris ini instal aplikasi tambahan:
<option name="test-file-name" value="FrameworksCoreTests.apk" /> <option name="test-file-name" value="BstatsTestApp.apk" />
Jangan lupa menandai pengujian Anda sebagai
@SmallTest
,@MediumTest
atau@LargeTest
Bangun modul pengujian dengan m, misalnya:
m FrameworksCoreTests
Jalankan tes:
Solusi paling sederhana adalah menggunakan Atest seperti ini:
atest FrameworksCoreTests
Atau untuk tes yang lebih kompleks, gunakan Harness tes Federasi Perdagangan :
m tradefed-all tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
Jika tidak menggunakan Tradefed, instal dan jalankan tes secara manual:
- Instal apk yang dihasilkan:
adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
Jalankan tes dengan berbagai opsi:
semua tes di apk
adb shell am instrument -w com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
semua tes di bawah paket Java tertentu
adb shell am instrument -w -e package android.animation \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
semua tes di bawah kelas tertentu
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
metode pengujian tertentu
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest#testCancel \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
Pengujian Anda dapat membuat pernyataan eksplisit lulus atau gagal menggunakan JUnit
API; selain itu, pengecualian yang tidak tertangkap juga akan menyebabkan kegagalan fungsional.
Untuk menampilkan metrik performa, kode pengujian Anda dapat memanggil Instrumentation#sendStatus
untuk mengirimkan daftar key-value pair. Penting untuk diperhatikan bahwa:
- metrik dapat berupa bilangan bulat atau floating point
- nilai non-numerik apa pun akan dibuang
- apk pengujian Anda dapat berupa pengujian fungsional atau pengujian metrik, namun pencampuran keduanya saat ini tidak didukung