Class AndroidJUnitRunner
adalah runner pengujian JUnit yang
memungkinkan Anda menjalankan pengujian JUnit 4 berinstrumen di perangkat Android,
termasuk yang menggunakan framework pengujian Espresso, UI Automator, dan Compose.
Runner pengujian menangani pemuatan paket pengujian dan aplikasi yang diuji ke perangkat, menjalankan pengujian, dan melaporkan hasil pengujian.
Runner pengujian ini mendukung beberapa tugas pengujian umum, termasuk:
Menulis pengujian JUnit
Cuplikan kode berikut menunjukkan cara menulis pengujian JUnit 4 berinstrumen
untuk memvalidasi bahwa operasi changeText
di class
ChangeTextBehavior
berfungsi dengan benar:
Kotlin
@RunWith(AndroidJUnit4::class) @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) @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
Saat menggunakan AndroidJUnitRunner
untuk menjalankan pengujian, Anda dapat mengakses konteks
untuk aplikasi yang sedang diuji dengan memanggil metode
ApplicationProvider.getApplicationContext()
statis. Jika Anda telah membuat subclass
Application
kustom di aplikasi Anda, metode ini akan menampilkan konteks
subclass kustom Anda.
Jika Anda adalah pengimplementasi alat, Anda dapat mengakses API pengujian tingkat rendah menggunakan
class InstrumentationRegistry
. Class ini mencakup objek
Instrumentation
, objek aplikasi target Context
, objek
Context
aplikasi pengujian, dan argumen command line yang diteruskan ke pengujian Anda.
Memfilter pengujian
Dalam pengujian JUnit 4.x, Anda bisa menggunakan anotasi untuk mengonfigurasi jalannya pengujian. Fitur ini meminimalkan kebutuhan untuk menambahkan kode boilerplate dan kondisional dalam pengujian Anda. Selain anotasi standar yang didukung oleh JUnit 4, runner pengujian juga mendukung anotasi khusus Android, termasuk hal berikut:
@RequiresDevice
: Menentukan bahwa pengujian hanya boleh berjalan pada perangkat fisik, bukan pada emulator.@SdkSuppress
: Mencegah pengujian agar tidak dijalankan pada level Android API yang lebih rendah dari level yang ditentukan. Misalnya, agar tidak menjalankan pengujian pada semua API dengan level yang lebih rendah dari 23, gunakan anotasi@SDKSuppress(minSdkVersion=23)
.@SmallTest
,@MediumTest
, dan@LargeTest
: Menentukan seberapa lama pengujian sebaiknya dijalankan dan seberapa sering Anda dapat menjalankan pengujian. Anda dapat menggunakan anotasi ini untuk memfilter pengujian yang akan dijalankan, dengan menetapkan propertiandroid.testInstrumentationRunnerArguments.size
:
-Pandroid.testInstrumentationRunnerArguments.size=small
Membagi pengujian
Jika perlu melakukan paralelisasi eksekusi pengujian, membagikannya di
beberapa server agar berjalan lebih cepat, Anda dapat membaginya menjadi grup, atau
shard. Runner pengujian mendukung pembagian satu rangkaian pengujian ke dalam beberapa
shard, sehingga Anda dapat dengan mudah menjalankan pengujian yang termasuk dalam shard yang sama secara bersamaan sebagai
grup. Setiap pecahan diidentifikasi dengan nomor indeks. Saat menjalankan pengujian, gunakan
opsi -e numShards
untuk menentukan jumlah shard terpisah yang akan dibuat dan
opsi -e shardIndex
untuk menentukan shard mana yang akan dijalankan.
Misalnya, untuk membagi rangkaian pengujian menjadi 10 bagian dan hanya menjalankan pengujian yang dikelompokkan dalam bagian 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 dalam
pemanggilan Instrumentation
-nya 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 lingkungan pengujian Anda:
- Status bersama minimal: Setiap pengujian berjalan dalam instance
Instrumentation
-nya sendiri. Oleh karena itu, jika pengujian Anda membagikan status aplikasi, sebagian besar status yang dibagikan akan dihapus dari CPU atau memori perangkat setelah setiap pengujian. Untuk menghapus semua status yang dibagikan dari CPU dan memori perangkat setelah setiap pengujian, gunakan flagclearPackageData
. Lihat bagian Mengaktifkan dari Gradle untuk mengetahui contohnya. - Error terisolasi: Meskipun satu pengujian mengalami error, error tersebut hanya terjadi pada
instance
Instrumentation
-nya sendiri. Artinya, pengujian lain dalam suite Anda masih berjalan, sehingga memberikan hasil pengujian yang lengkap.
Isolasi ini dapat menyebabkan peningkatan waktu eksekusi pengujian karena Android Test Orchestrator memulai ulang aplikasi setelah setiap pengujian.
Android Studio dan Firebase Test Lab memiliki Android Test Orchestrator prainstal, meskipun Anda harus mengaktifkan fitur 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 Anda:
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 ditunjukkan
di Enable from Gradle ke file build.gradle
aplikasi Anda.
Mengaktifkan dari command line
Untuk menggunakan Android Test Orchestrator di 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 menggunakan toolchain yang berbeda untuk menguji aplikasi, Anda masih dapat menggunakan Android Test 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 pengujian dan APK aplikasi yang sedang diuji:
Android Test Orchestrator mengumpulkan pengujian JUnit di awal test suite yang dijalankan, lalu menjalankan setiap pengujian secara terpisah, dalam instance Instrumentation
-nya sendiri.
Informasi selengkapnya
Untuk mempelajari lebih lanjut cara menggunakan AndroidJUnitRunner, lihat referensi API.
Referensi lainnya
Untuk informasi selengkapnya tentang penggunaan AndroidJUnitRunner
, lihat referensi
berikut.
Contoh
- AndroidJunitRunnerSample: Menunjukkan anotasi pengujian, pengujian berparameter, dan pembuatan rangkaian pengujian.