Pengujian di Android Studio dan Pengujian dari command line menjelaskan cara menyiapkan dan menjalankan konfigurasi pengujian dasar. Namun, saat aplikasi dan persyaratan pengujiannya menjadi lebih canggih, Anda mungkin perlu mengadaptasikan konfigurasi pengujian lebih jauh. Misalnya, Anda mungkin memerlukan penyiapan pengujian lanjutan saat ingin melakukan hal berikut:
- Menjalankan pengujian berinstrumen hanya untuk varian build tertentu atau mengganti setelan manifesnya.
- Mengubah jenis build tempat pengujian Anda berjalan, atau mengonfigurasi opsi Gradle-nya.
- Mengekstrak pengujian berinstrumen ke dalam modul pengujiannya sendiri.
- Melakukan pengujian yang lebih canggih sebagai bagian dari penyiapan Continuous Integration.
Halaman ini menjelaskan berbagai cara untuk mengonfigurasi pengujian saat setelan default tidak sesuai dengan kebutuhan Anda.
Membuat pengujian berinstrumen untuk varian build
Jika project Anda menyertakan varian build dengan beberapa set sumber unik, Anda mungkin ingin menyertakan pengujian berinstrumen yang sesuai dengan set sumber tersebut. Cara ini akan membuat kode pengujian Anda tetap teratur dan hanya menjalankan pengujian yang berlaku bagi varian build yang ada.
Untuk menautkan pengujian berinstrumen ke varian build, tempatkan pengujian dalam
set sumbernya sendiri yang terletak di
src/androidTestVariantName
.
Pengujian berinstrumen pada set sumber src/androidTest/
digunakan bersama oleh semua
varian build. Saat mem-build APK pengujian untuk varian "MyFlavor" aplikasi Anda,
Gradle menggabungkan set sumber src/androidTest/
dan
src/androidTestMyFlavor/
.
Untuk menambahkan set sumber pengujian bagi varian build di Android Studio, ikuti langkah-langkah ini:
- Di jendela Project, klik menu, lalu pilih tampilan Project.
- Dalam folder modul yang sesuai, klik kanan folder src, lalu klik New > Directory.
- Untuk nama direktori, masukkan "androidTestNamaVarian". Misalnya, jika
Anda memiliki varian build bernama "MyFlavor", gunakan nama direktori
androidTestMyFlavor
. - Klik OK.
- Klik kanan direktori lalu pilih New > Directory.
- Masukkan "java" sebagai nama direktori, lalu klik OK.
Sekarang, Anda dapat menambahkan pengujian ke set sumber baru ini dengan mengikuti langkah-langkah berikut untuk menambahkan pengujian baru. Saat Anda mencapai dialog Choose Destination Directory, pilih set sumber pengujian varian baru.
Tabel berikut menunjukkan contoh cara file uji instrumentasi dapat berada di set sumber yang sesuai dengan set sumber kode aplikasi:
Jalur class aplikasi | Jalur class uji instrumentasi yang sesuai |
---|---|
src/main/java/Example.java
|
src/androidTest/java/AndroidExampleTest.java
|
src/myFlavor/java/Example.java
|
src/androidTestMyFlavor/java/AndroidExampleTest.java
|
Sama seperti yang dilakukan pada set sumber aplikasi Anda, build Gradle
menggabungkan dan menggantikan semua file dari set sumber pengujian yang berbeda. Dalam hal ini,
file AndroidExampleTest.java
di set sumber androidTestMyFlavor
menggantikan
versi di set sumber androidTest
. Ini karena
set sumber ragam produk lebih diprioritaskan daripada set sumber utama.
Jika memilih ragam lain dalam pemilih varian build,
folder androidTest
yang sesuai akan ditampilkan dalam tampilan Android agar dapat
menampilkan folder yang digunakan:
Folder androidTestMyFlavor
tidak akan ditampilkan jika varian yang berbeda
dipilih:
Tampilannya akan terlihat sedikit berbeda jika Anda menggunakan tampilan Project, tetapi tetap berlaku prinsip yang sama:
Jika varian lain dipilih, folder androidTestMyFlavor
masih akan
terlihat, tetapi tidak ditampilkan sebagai aktif:
Untuk mengetahui informasi selengkapnya tentang cara penggabungan set sumber, baca Set sumber.
Mengonfigurasi setelan manifes instrumentasi
Pengujian berinstrumen di-build menjadi APK terpisah dengan file
AndroidManifest.xml
-nya sendiri. Saat membuat APK pengujian Anda, Gradle
akan otomatis membuat file AndroidManifest.xml
dan mengonfigurasinya
dengan node
<instrumentation>
.
Salah satu alasan Gradle mengonfigurasi node ini untuk Anda adalah guna memastikan bahwa
properti targetPackage
menentukan nama paket yang benar dari aplikasi yang sedang diuji.
Guna mengubah setelan lain untuk node ini, buat file manifes
lain dalam set sumber pengujian atau konfigurasikan file build.gradle
level modul, seperti yang ditunjukkan dalam
contoh kode berikut. Daftar lengkap opsi dapat ditemukan di
referensi API
BaseFlavor
.
Groovy
android { ... defaultConfig { ... testApplicationId "com.example.test" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testHandleProfiling true testFunctionalTest true } }
Kotlin
android { ... defaultConfig { ... testApplicationId = "com.example.test" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testHandleProfiling = true testFunctionalTest = true } }
Each product flavor you configure can override properties in the
defaultConfig {}
block. To learn more, go to Configure product
flavors.
The properties in the snippet are:
Setting | Description |
---|---|
testApplicationId
|
Specifies the application ID for the test APK. |
testInstrumentationRunner
|
Specifies the fully qualified class name of the test instrumentation runner. |
testHandleProfiling
|
If set to true , enables the instrumentation class
to start and stop profiling.If set to false , profiling occurs the entire time
the instrumentation class is running. |
testFunctionalTest
|
If set to true , indicates that the Android system
should run the instrumentation class as a functional
test.The default value is false . |
Change the test build type
By default, all instrumentation tests run against the debug
build type.
You can change this to another build type by using the testBuildType
property in your module-level build.gradle
file. For example, if you want
to run your tests against your staging
build type, edit the file as
shown in the following snippet:
Groovy
android { ... testBuildType "staging" }
Kotlin
android { ... testBuildType = "staging" }
Mengonfigurasi opsi pengujian Gradle
Plugin Android Gradle memungkinkan Anda
menentukan opsi tertentu untuk semua atau beberapa pengujian. Pada
file build.gradle
level modul, gunakan
blok testOptions
untuk menentukan opsi yang mengubah cara Gradle menjalankan semua pengujian Anda:
Groovy
android { ... // Encapsulates options for running tests. testOptions { reportDir "$rootDir/test-reports" resultsDir "$rootDir/test-results" } }
Kotlin
android { ... // Encapsulates options for running tests. testOptions { reportDir "$rootDir/test-reports" resultsDir = "$rootDir/test-results" } }
Properti reportDir
akan mengubah direktori tempat Gradle menyimpan laporan
pengujian. Secara default, Gradle menyimpan laporan pengujian di
direktori path_to_your_project/module_name
/build/outputs/reports/
. $rootDir
akan menetapkan jalur berdasarkan
direktori utama project saat ini.
Properti resultsDir
akan mengubah direktori tempat Gradle menyimpan hasil
pengujian. Secara default, Gradle menyimpan hasil pengujian di
direktori path_to_your_project/module_name
/build/outputs/test-results/
. $rootDir
akan menetapkan jalur berdasarkan
direktori utama project saat ini.
Untuk menentukan opsi pada pengujian unit lokal saja, konfigurasi blok
unitTests
di dalam testOptions
.
Groovy
android { ... testOptions { ... // Encapsulates options for local unit tests. unitTests { returnDefaultValues true all { jvmArgs '-XX:MaxPermSize=256m' if (it.name == 'testDebugUnitTest') { systemProperty 'debug', 'true' } ... } } } }
Kotlin
android { ... testOptions { ... // Encapsulates options for local unit tests. unitTests { returnDefaultValues = true all { jvmArgs = listOf("-XX:MaxPermSize=256m") if (it.name == "testDebugUnitTest") { systemProperty = mapOf("debug" to "true") } ... } } } }
Secara default, pengujian unit lokal akan menampilkan pengecualian setiap kali kode
yang Anda uji mencoba mengakses API platform Android, kecuali jika Anda
menyatakan dependensi Android
sendiri atau dengan framework pengujian seperti
Mockito. Namun, Anda dapat mengaktifkan properti returnDefaultValues
sehingga
pengujian menampilkan null atau nol, bukan pengecualian, saat
mengakses API platform.
Blok all
mengenkapsulasi opsi untuk mengontrol cara Gradle mengeksekusi
pengujian unit lokal. Untuk daftar semua opsi yang dapat Anda tentukan, baca
dokumentasi referensi Gradle.
Properti jvmArgs
akan menetapkan argumen JVM untuk JVM pengujian.
Anda juga dapat memeriksa nama tugas untuk menerapkan opsi hanya ke pengujian yang
ditentukan. Dalam contoh cuplikan, properti debug
disetel ke true
, tetapi
hanya untuk tugas testDebugUnitTest
.
Menggunakan modul pengujian terpisah untuk pengujian berinstrumen
Jika Anda ingin memiliki modul khusus untuk pengujian berinstrumen agar dapat mengisolasi kode lainnya dari pengujian, buat modul pengujian terpisah dan konfigurasikan build-nya seperti Anda melakukan konfigurasi build untuk modul library.
Untuk membuat modul pengujian, lakukan langkah berikut:
- Buat modul library.
- Di file
build.gradle
level modul, terapkan plugincom.android.test
, bukancom.android.library
. - Klik Sync Project .
Setelah membuat modul pengujian, Anda dapat menyertakan kode pengujian dalam
set sumber utama atau varian (misalnya, src/main/java
atau
src/variant/java
). Jika modul aplikasi Anda menentukan
beberapa ragam produk, Anda dapat membuat ulang ragam tersebut dalam modul pengujian.
Dengan menggunakan pengelolaan dependensi yang berbasis
varian,
modul pengujian mencoba menguji ragam yang cocok dalam modul target.
Secara default, modul pengujian hanya berisi dan menguji varian debug. Namun,
Anda dapat membuat jenis build baru agar sesuai dengan project aplikasi yang diuji. Agar modul
pengujian menguji jenis build yang berbeda, dan bukan build debug, gunakan
VariantFilter
untuk menonaktifkan varian debug dalam project pengujian, seperti yang ditampilkan:
Groovy
android { variantFilter { variant -> if (variant.buildType.name.equals('debug')) { variant.setIgnore(true); } } }
Kotlin
android { variantFilter { if (buildType.name == "debug") { ignore = true } } }
Jika Anda ingin modul pengujian hanya menargetkan ragam atau jenis build tertentu dari suatu
aplikasi, Anda dapat menggunakan properti matchingFallbacks
agar hanya menargetkan varian yang ingin Anda uji. Cara ini juga akan mencegah
modul pengujian mengonfigurasi varian tersebut untuk pengujian itu sendiri.