AndroidJUnitRunner

Class AndroidJUnitRunner adalah runner pengujian JUnit yang memungkinkan Anda untuk menjalankan class pengujian tipe JUnit 3 atau JUnit 4 pada perangkat Android, termasuk yang menggunakan framework pengujian Espresso dan UI Automator.

Runner pengujian menangani pemuatan paket pengujian dan aplikasi yang diuji ke perangkat, menjalankan pengujian, dan melaporkan hasil pengujian. Class ini menggantikan class InstrumentationTestRunner, yang hanya mendukung pengujian JUnit 3.

Runner pengujian ini mendukung beberapa tugas pengujian umum, termasuk:

Menulis pengujian JUnit

Test runner kompatibel dengan pengujian JUnit 3 dan JUnit 4 (hingga JUnit 4.10). Namun, Anda tidak boleh mencampurkan kode pengujian JUnit 3 dan JUnit 4 dalam paket yang sama, karena hal ini dapat menyebabkan hasil yang tidak diharapkan. Jika Anda membuat class pengujian JUnit 4 berinstrumen untuk dijalankan pada perangkat atau emulator, class pengujian Anda harus diawali dengan anotasi @RunWith(AndroidJUnit4.class).

Cuplikan kode berikut menunjukkan cara menulis pengujian JUnit 4 berinstrumen untuk memvalidasi bahwa operasi changeText di class ChangeTextBehavior bekerja dengan benar:

Kotlin

    @RunWith(AndroidJUnit4::class)
    @LargeTest
    class ChangeTextBehaviorTest {
        val stringToBeTyped = "Espresso"
        @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
    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)));
        }
    }
    

Menggunakan Android Test Orchestrator

Saat menggunakan AndroidJUnitRunner versi 1.0 atau yang lebih tinggi, Anda memiliki akses ke fitur yang disebut Android Test Orchestrator, yang memungkinkan Anda menjalankan setiap pengujian aplikasi pada pemanggilan Instrumentation.

Android Test Orchestrator memberikan manfaat berikut untuk lingkungan pengujian Anda:

  • Status berbagi yang minimal. Setiap pengujian dijalankan dalam instance Instrumentation-nya sendiri. Oleh karena itu, jika pengujian Anda membagikan status aplikasi, sebagian besar status yang dibagikan itu dihapus dari CPU atau memori perangkat setelah setiap pengujian.

    Untuk menghapus semua status yang dibagikan dari CPU dan memori perangkat setelah pengujian, gunakan flag clearPackageData.

  • Error terisolasi. Jika terdapat satu pengujian yang error, pengujian itu hanya akan mengeluarkan instance Instrumentation-nya sendiri, sehingga pengujian lainnya pada paket Anda akan tetap berjalan.

Android Studio dan Firebase Test Lab memiliki Android Test Orchestrator prainstal, meskipun Anda harus mengaktifkan fitur di Android Studio.

Jika Anda menggunakan toolchain yang berbeda untuk menguji aplikasi, Anda masih dapat menggunakan Android Test Orchestrator dengan melakukan langkah berikut:

  1. Sertakan paket yang diperlukan dalam file build aplikasi Anda.
  2. Aktifkan Android Test Orchestrator dari command line.

Mengaktifkan dari Gradle

Untuk mengaktifkan Android Test Orchestrator menggunakan fitur command line Gradle, lakukan langkah berikut:

  1. 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'
        }
  2. Jalankan Android Test Orchestrator dengan menjalankan perintah berikut:

        ./gradlew connectedCheck

Mengaktifkan dari Android Studio

Dukungan untuk Android Test Orchestrator tersedia di Android Studio 3.0 dan yang lebih tinggi. Untuk mengaktifkan Android Test Orchestrator di Android Studio, tambahkan pernyataan yang ditunjukkan di Mengaktifkan dari Gradle ke file build.gradle aplikasi Anda.

Mengaktifkan dari command line

Untuk menggunakan Android Test Orchestrator melalui command line, jalankan perintah berikut di jendela terminal:

    # Install the test orchestrator.
    adb install -r path/to/m2repository/androidx/test/orchestrator/1.1.0/orchestrator-1.1.0.apk

    # Install test services.
    adb install -r path/to/m2repository/androidx/test/services/test-services/1.1.0/test-services-1.1.0.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 sintaks perintah, Anda menginstall Android Test Orchestrator, lalu menggunakannya secara langsung.

Catatan: Jika tidak mengetahui instrumentasi target Anda, Anda dapat mencarinya dengan menjalankan perintah berikut:

    adb shell pm list instrumentation

Arsitektur

APK layanan Orchestrator disimpan dalam proses yang terpisah dari APK pengujian dan APK aplikasi yang sedang diuji, seperti yang ditunjukkan pada Gambar 1:

Gambar 1. Struktur APK Android Test Orchestrator

Android Test Orchestrator mengumpulkan pengujian JUnit di awal test suite yang dijalankan, lalu menjalankan setiap pengujian secara terpisah, dalam instance Instrumentation-nya sendiri.

Mengakses konteks aplikasi

Untuk memperoleh konteks untuk aplikasi yang diuji, panggil metode ApplicationProvider.getApplicationContext() statis. Jika Anda telah membuat subclass Application kustom di aplikasi Anda, metode ini menampilkan konteks subclass kustom Anda.

Jika Anda berperan sebagai pengimplementasi alat, Anda dapat mengakses API pengujian tingkat rendah menggunakan class InstrumentationRegistry. Class ini mencakup objek Instrumentation, objek Context aplikasi target, objek Context aplikasi pengujian, dan argumen command line yang diteruskan ke pengujian Anda. Data ini akan berguna saat Anda menulis pengujian menggunakan framework UI Automator atau saat pengujian Anda bergantung pada konteks aplikasi.

Memfilter pengujian

Dalam pengujian JUnit 4.x, Anda bisa menggunakan anotasi untuk mengonfigurasi jalannya pengujian. Fitur ini meminimalkan kebutuhan untuk menambahkan kode kondisional dan boilerplate dalam pengujian Anda. Selain anotasi standar yang didukung oleh JUnit 4, test runner juga mendukung anotasi khusus Android, termasuk:

  • @RequiresDevice: Menetapkan bahwa pengujian harus dijalankan hanya pada perangkat fisik, bukan pada emulator.
  • @SdkSuppress: Mencegah pengujian agar tidak dijalankan pada level Android API yang lebih rendah daripada 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.

Membagi pengujian

Runner pengujian mendukung pembagian satu test suite ke dalam bagian pecahan, sehingga Anda bisa dengan mudah menjalankan pengujian yang termasuk dalam bagian yang sama secara bersamaan sebagai satu kelompok, pada instance Instrumentation yang sama. Setiap bagian diidentifikasi dengan nomor indeks. Saat menjalankan pengujian, gunakan opsi -e numShards untuk menentukan jumlah bagian terpisah yang akan dibuat dan opsi -e shardIndex untuk menentukan bagian mana yang akan dijalankan.

Misalnya, untuk membagi paket pengujian menjadi 10 bagian dan hanya menjalankan pengujian yang dikelompokkan dalam bagian kedua, gunakan perintah berikut:

    adb shell am instrument -w -e numShards 10 -e shardIndex 2
    

Informasi selengkapnya

Untuk mempelajari penggunaan runner pengujian ini lebih lanjut, lihat referensi API.

Untuk menggunakan class AndroidJUnitRunner, sertakan class tersebut sebagai salah satu paket project Anda, seperti yang dijelaskan dalam menyiapkan project untuk AndroidX Test.

Referensi lainnya

Untuk informasi selengkapnya tentang menggunakan AndroidJUnitRunner, lihat referensi berikut.

Contoh