Penyiapan pengujian lanjutan

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:

  1. Di jendela Project, klik menu, lalu pilih tampilan Project.
  2. Dalam folder modul yang sesuai, klik kanan folder src, lalu klik New > Directory.
  3. Untuk nama direktori, masukkan "androidTestNamaVarian". Misalnya, jika Anda memiliki varian build bernama "MyFlavor", gunakan nama direktori androidTestMyFlavor.
  4. Klik OK.
  5. Klik kanan direktori lalu pilih New > Directory.
  6. 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:

Tabel 1. Kode sumber aplikasi dan file uji instrumentasi yang sesuai

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:

Varian MyFlavor dipilih dan folder androidTestMyFlavor akan ditampilkan
        dalam tampilan Android
Gambar 1. Varian MyFlavor dipilih; folder androidTestMyFlavor akan ditampilkan dalam tampilan Android.

Folder androidTestMyFlavor tidak akan ditampilkan jika varian yang berbeda dipilih:

Varian OtherFlavor dipilih dan folder androidTestMyFlavor tidak akant
            ditampilkan di tampilan Android
Gambar 2. Varian OtherFlavor dipilih; Folder androidTestMyFlavor tidak akan ditampilkan di tampilan Android.

Tampilannya akan terlihat sedikit berbeda jika Anda menggunakan tampilan Project, tetapi tetap berlaku prinsip yang sama:

Varian MyFlavor dipilih dan folder androidTestMyFlavor akan aktif
        di tampilan Project
Gambar 3. Varian MyFlavor dipilih; folder androidTestMyFlavor akan aktif dalam tampilan Project.

Jika varian lain dipilih, folder androidTestMyFlavor masih akan terlihat, tetapi tidak ditampilkan sebagai aktif:

Varian OtherFlavor dipilih dan folder androidTestMyFlavor tidak akan
            aktif di tampilan Project
Gambar 4. Varian OtherFlavor dipilih; folder androidTestMyFlavor tidak akan aktif dalam tampilan Project.

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:

  1. Buat modul library.
  2. Di file build.gradle level modul, terapkan plugin com.android.test, bukan com.android.library.
  3. 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.