Class AndroidJUnitRunner
adalah runner pengujian JUnit yang
memungkinkan Anda menjalankan pengujian JUnit 4 berinstrumen di perangkat Android,
termasuk yang menggunakan Espresso, UI Automator, dan Compose
framework pengujian.
Runner pengujian menangani pemuatan paket pengujian dan aplikasi yang sedang diuji ke perangkat Anda, menjalankan pengujian, dan melaporkan hasil pengujian.
Runner pengujian ini mendukung beberapa tugas pengujian umum, termasuk:
Menulis pengujian JUnit
Cuplikan kode berikut ini menunjukkan cara menulis JUnit 4 berinstrumen
uji untuk memvalidasi bahwa operasi changeText
di ChangeTextBehavior
class ini berfungsi dengan benar:
Kotlin
@RunWith(AndroidJUnit4::class) // Only needed when mixing JUnit 3 and 4 tests @LargeTest // Optional runner annotation class ChangeTextBehaviorTest { val stringToBeTyped = "Espresso" // ActivityTestRule accesses context through the runner @get:Rule val activityRule = ActivityTestRule(MainActivity::class.java) @Test fun changeText_sameActivity() { // Type text and then press the button. onView(withId(R.id.editTextUserInput)) .perform(typeText(stringToBeTyped), closeSoftKeyboard()) onView(withId(R.id.changeTextBt)).perform(click()) // Check that the text was changed. onView(withId(R.id.textToBeChanged)) .check(matches(withText(stringToBeTyped))) } }
Java
@RunWith(AndroidJUnit4.class) // Only needed when mixing JUnit 3 and 4 tests @LargeTest // Optional runner annotation public class ChangeTextBehaviorTest { private static final String stringToBeTyped = "Espresso"; @Rule public ActivityTestRule<MainActivity>; activityRule = new ActivityTestRule<>;(MainActivity.class); @Test public void changeText_sameActivity() { // Type text and then press the button. onView(withId(R.id.editTextUserInput)) .perform(typeText(stringToBeTyped), closeSoftKeyboard()); onView(withId(R.id.changeTextBt)).perform(click()); // Check that the text was changed. onView(withId(R.id.textToBeChanged)) .check(matches(withText(stringToBeTyped))); } }
Mengakses Konteks Aplikasi
Jika Anda menggunakan AndroidJUnitRunner
untuk menjalankan pengujian, Anda dapat mengakses konteksnya
untuk aplikasi yang sedang diuji dengan memanggil metode
Metode ApplicationProvider.getApplicationContext()
. Jika Anda telah membuat
subclass dari Application
di aplikasi Anda, metode ini akan menampilkan
konteks subclass-nya.
Jika Anda seorang pengimplementasi alat, Anda bisa mengakses API pengujian tingkat rendah menggunakan
Class InstrumentationRegistry
. Kelas ini mencakup kelas
Objek Instrumentation
, objek Context
aplikasi target, pengujian
aplikasi Context
, dan argumen command line yang diteruskan ke pengujian Anda.
Memfilter pengujian
Dalam pengujian JUnit 4.x, Anda bisa menggunakan anotasi untuk mengonfigurasi jalannya pengujian. Ini meminimalkan kebutuhan untuk menambahkan boilerplate dan kode kondisional dalam pengujian. Selain anotasi standar yang didukung oleh JUnit 4, pengujian ini runner juga mendukung anotasi khusus Android, termasuk berikut ini:
@RequiresDevice
: Menentukan bahwa pengujian hanya boleh dijalankan pada jaringan fisik pada perangkat seluler, bukan pada emulator.@SdkSuppress
: Mencegah pengujian agar tidak dijalankan di Android API yang lebih rendah tingkat dari tingkat yang diberikan. Misalnya, untuk menyembunyikan pengujian pada semua API level yang lebih rendah dari 23 agar tidak berjalan, gunakan anotasi@SDKSuppress(minSdkVersion=23)
.@SmallTest
,@MediumTest
, dan@LargeTest
: Mengklasifikasikan durasi pengujian yang harus dilakukan untuk menjalankan, dan akibatnya, seberapa sering Anda dapat menjalankan pengujian. Anda anotasi ini bisa digunakan untuk memfilter pengujian yang akan dijalankan, menyetelandroid.testInstrumentationRunnerArguments.size
properti:
-Pandroid.testInstrumentationRunnerArguments.size=small
Membagi pengujian
Jika Anda perlu memparalelkan eksekusi pengujian, membagikannya ke seluruh
beberapa server untuk membuatnya berjalan lebih cepat, Anda
dapat membaginya menjadi beberapa grup, atau
shard. Runner pengujian mendukung pembagian satu rangkaian pengujian menjadi beberapa
sharding, sehingga Anda dapat dengan mudah menjalankan pengujian yang termasuk dalam shard yang sama sebagai
ras. Setiap pecahan diidentifikasi dengan nomor indeks. Saat menjalankan pengujian, gunakan
-e numShards
untuk menentukan jumlah shard terpisah yang akan dibuat dan
-e shardIndex
untuk menentukan shard mana yang akan dijalankan.
Misalnya, untuk membagi paket pengujian menjadi 10 shard dan hanya menjalankan pengujian yang dikelompokkan dalam shard kedua, gunakan perintah adb berikut:
adb shell am instrument -w -e numShards 10 -e shardIndex 2
Menggunakan Android Test Orchestrator
Android Test Orchestrator memungkinkan Anda menjalankan setiap pengujian aplikasi di dalam
pemanggilan Instrumentation
sendiri. Saat menggunakan AndroidJUnitRunner versi 1.0
atau yang lebih tinggi, Anda memiliki akses ke Android Test Orchestrator.
Android Test Orchestrator menawarkan manfaat berikut untuk pengujian Anda lingkungan:
- Status bersama minimal: Setiap pengujian berjalan di
Instrumentation
-nya sendiri di instance Compute Engine. Oleh karena itu, jika pengujian Anda berbagi status aplikasi, sebagian besar status bersama tersebut akan dihapus dari CPU atau memori perangkat setelah setiap pengujian. Untuk menghapus semua status yang dibagikan dari CPU dan memori perangkat setelah setiap uji, gunakan flagclearPackageData
. Lihat Mengaktifkan dari Gradle sebagai contoh. - Error diisolasi: Meskipun satu pengujian mengalami error, error hanya akan dikurangi
instance
Instrumentation
sendiri. Ini berarti bahwa pengujian lain di suite Anda tetap berjalan, sehingga memberikan hasil pengujian yang lengkap.
Pemisahan ini menghasilkan kemungkinan peningkatan waktu eksekusi uji karena Android Test Orchestrator memulai ulang aplikasi setelah setiap pengujian.
Android Studio dan Firebase Test Lab memiliki Android Test Orchestrator diinstal lebih dulu, meskipun Anda perlu mengaktifkan fitur tersebut di Android Studio.
Mengaktifkan dari Gradle
Untuk mengaktifkan Android Test Orchestrator menggunakan alat command line Gradle, selesaikan langkah-langkah berikut:
- Langkah 1: Ubah file gradle. Tambahkan pernyataan berikut ke
file
build.gradle
project:
android {
defaultConfig {
...
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
// The following argument makes the Android Test Orchestrator run its
// "pm clear" command after each test invocation. This command ensures
// that the app's state is completely cleared between tests.
testInstrumentationRunnerArguments clearPackageData: 'true'
}
testOptions {
execution 'ANDROIDX_TEST_ORCHESTRATOR'
}
}
dependencies {
androidTestImplementation 'androidx.test:runner:1.1.0'
androidTestUtil 'androidx.test:orchestrator:1.1.0'
}
- Langkah 2: Jalankan Android Test Orchestrator dengan menjalankan perintah berikut:
./gradlew connectedCheck
Mengaktifkan dari Android Studio
Untuk mengaktifkan Android Test Orchestrator di Android Studio, tambahkan pernyataan yang ditampilkan
di Enable from Gradle ke file build.gradle
aplikasi Anda.
Mengaktifkan dari command line
Untuk menggunakan Android Test Orchestrator pada command line, jalankan perintah berikut di jendela terminal:
DEVICE_API_LEVEL=$(adb shell getprop ro.build.version.sdk)
FORCE_QUERYABLE_OPTION=""
if [[ $DEVICE_API_LEVEL -ge 30 ]]; then
FORCE_QUERYABLE_OPTION="--force-queryable"
fi
# uninstall old versions
adb uninstall androidx.test.services
adb uninstall androidx.test.orchestrator
# Install the test orchestrator.
adb install $FORCE_QUERYABLE_OPTION -r path/to/m2repository/androidx/test/orchestrator/1.4.2/orchestrator-1.4.2.apk
# Install test services.
adb install $FORCE_QUERYABLE_OPTION -r path/to/m2repository/androidx/test/services/test-services/1.4.2/test-services-1.4.2.apk
# Replace "com.example.test" with the name of the package containing your tests.
# Add "-e clearPackageData true" to clear your app's data in between runs.
adb shell 'CLASSPATH=$(pm path androidx.test.services) app_process / \
androidx.test.services.shellexecutor.ShellMain am instrument -w -e \
targetInstrumentation com.example.test/androidx.test.runner.AndroidJUnitRunner \
androidx.test.orchestrator/.AndroidTestOrchestrator'
Seperti yang ditunjukkan sintaksis perintah, Anda menginstal Android Test Orchestrator, lalu menggunakannya secara langsung.
adb shell pm list instrumentation
Menggunakan toolchain yang berbeda
Jika Anda menggunakan toolchain yang berbeda untuk menguji aplikasi, Anda masih dapat menggunakan Android Uji Orchestrator dengan menyelesaikan langkah-langkah berikut:
- Sertakan paket yang diperlukan dalam file build aplikasi Anda.
- Aktifkan Android Test Orchestrator dari command line.
Arsitektur
APK layanan Orchestrator disimpan dalam proses yang terpisah dari APK uji dan APK aplikasi yang sedang diuji:
Android Test Orchestrator mengumpulkan pengujian JUnit di awal pengujian Anda
tetapi kemudian mengeksekusi setiap pengujian secara terpisah, dalam instance
Instrumentation
.
Informasi selengkapnya
Untuk mempelajari lebih lanjut cara menggunakan AndroidJUnitRunner, lihat referensi API.
Referensi lainnya
Untuk informasi selengkapnya tentang penggunaan AndroidJUnitRunner
, lihat referensi berikut
Google Cloud Platform.
Contoh
- AndroidJunitRunnerSample: Menunjukkan anotasi pengujian, pengujian berparameter, dan pembuatan paket pengujian.