Penyiapan pengujian lanjutan

Halaman 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.

Halaman ini menjelaskan berbagai cara untuk mengonfigurasi pengujian Anda saat setelan default tidak sesuai dengan kasus penggunaan yang sedang dihadapi.

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. Ini membuat kode pengujian Anda tetap teratur dan memungkinkan Anda menjalankan hanya pengujian yang berlaku bagi varian build yang ada.

Anda dapat menautkan pengujian berinstrumen ke varian build dengan menempatkannya di 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. Pada jendela Project di sebelah kiri, klik menu drop-down, 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", nama direktori seharusnya "androidTestMyFlavor." Lalu, klik OK.
  4. Klik kanan direktori baru, lalu klik New > Directory.
  5. 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/Foo.java src/androidTest/java/AndroidFooTest.java
src/myFlavor/java/Foo.java src/androidTestMyFlavor/java/AndroidFooTest.java

Sama seperti yang dilakukan pada set sumber aplikasi Anda, build Gradle menggabungkan dan menggantikan file dari berbagai set sumber pengujian. Dalam hal ini, file AndroidFooTest.java di set sumber androidTestMyFlavor menggantikan versi di set sumber androidTest. Alasan di balik ini adalah set sumber ragam produk memiliki prioritas atas set sumber utama. Untuk informasi cara set sumber digabungkan selengkapnya, lihat Mengonfigurasi build Anda.

Mengonfigurasi setelan manifes instrumentasi

Pengujian berinstrumen di-build menjadi APK terpisah, dengan file AndroidManifest.xml-nya sendiri. Saat mem-build APK pengujian Anda, Gradle 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. Anda dapat mengubah beberapa setelan lainnya untuk node ini dengan membuat file manifes lain dalam set sumber pengujian atau mengonfigurasi file build.gradle level modul seperti yang ditunjukkan pada contoh kode berikut. Daftar lengkap opsi dapat ditemukan di referensi API BaseFlavor.

android {

    ...

    // Each product flavor you configure can override properties in the
    // defaultConfig {} block. To learn more, go to Configure product flavors.

    defaultConfig {

        ...

        // Specifies the application ID for the test APK.
        testApplicationId = "com.test.foo"

        // Specifies the fully-qualified class name of the test instrumentation
        // runner.
        testInstrumentationRunner = "android.test.InstrumentationTestRunner"

        // If set to true, enables the instrumentation class to start and stop profiling.
        // If set to false (default), profiling occurs the entire time the instrumentation
        // class is running.
        testHandleProfiling = true

        // If set to true, indicates that the Android system should run the instrumentation
        // class as a functional test. The default value is false.
        testFunctionalTest = true

    }
}

Mengubah jenis build pengujian

Secara default, semua uji instrumentasi dijalankan pada jenis build debug. Anda dapat mengubahnya ke jenis build lain dengan menggunakan properti testBuildType di file build.gradle level modul. Misalnya jika Anda ingin menjalankan pengujian terhadap jenis build staging, edit file tersebut seperti yang ditampilkan dalam cuplikan berikut.

android {

    ...

    testBuildType "staging"

}

Mengonfigurasi opsi pengujian Gradle

Plugin Android Gradle memungkinkan Anda menentukan opsi tertentu untuk semua atau beberapa pengujian. Di 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 {
        // Changes the directory where Gradle saves test reports. By default,
        // Gradle saves test reports in the
        // path_to_your_project/module_name/build/outputs/reports/ directory.
        // '$rootDir' sets the path relative to the root directory of the
        // current project.
        reportDir "$rootDir/test-reports"
        // Changes the directory where Gradle saves test results. By default,
        // Gradle saves test results in the
        // path_to_your_project/module_name/build/outputs/test-results/ directory.
        // '$rootDir' sets the path relative to the root directory of the
        // current project.
        resultsDir "$rootDir/test-results"
    }
}

Kotlin

android {
    ...
    // Encapsulates options for running tests.
    testOptions {
        // Changes the directory where Gradle saves test reports. By default,
        // Gradle saves test reports in the
        // path_to_your_project/module_name/build/outputs/reports/ directory.
        // '$rootDir' sets the path relative to the root directory of the
        // current project.
        reportDir "$rootDir/test-reports"
        // Changes the directory where Gradle saves test results. By default,
        // Gradle saves test results in the
        // path_to_your_project/module_name/build/outputs/test-results/ directory.
        // '$rootDir' sets the path relative to the root directory of the
        // current project.
        resultsDir = "$rootDir/test-results"
    }
}

Untuk menentukan opsi pada pengujian unit lokal saja, konfigurasi blok unitTests{} di dalam testOptions{}.

Groovy

android {
    ...
    testOptions {
        ...
        // Encapsulates options for local unit tests.
        unitTests {
            // By default, local unit tests throw an exception any time the code
            // you are testing tries to access Android platform APIs (unless you
            /// mock Android dependencies yourself or with a testing framework like Mockito).
            // However, you can enable the following property so that the test
            // returns either null or zero when accessing platform APIs, rather
            // than throwing an exception.
            returnDefaultValues true

            // Encapsulates options for controlling how Gradle executes local
            // unit tests. For a list of all the options you can specify, read
            // Gradle's reference documentation.
            all {
                // Sets JVM argument(s) for the test JVM(s).
                jvmArgs '-XX:MaxPermSize=256m'

                // You can also check the task name to apply options to only the
                // tests you specify.
                if (it.name == 'testDebugUnitTest') {
                    systemProperty 'debug', 'true'
                }
                ...
            }
        }
    }
}

Kotlin

android {
    ...
    testOptions {
        ...
        // Encapsulates options for local unit tests.
        unitTests {
            // By default, local unit tests throw an exception any time the code
            // you are testing tries to access Android platform APIs (unless you
            /// mock Android dependencies yourself or with a testing framework like Mockito).
            // However, you can enable the following property so that the test
            // returns either null or zero when accessing platform APIs, rather
            // than throwing an exception.
            returnDefaultValues = true

            // Encapsulates options for controlling how Gradle executes local
            // unit tests. For a list of all the options you can specify, read
            // Gradle's reference documentation.
            all {
                // Sets JVM argument(s) for the test JVM(s).
                jvmArgs = listOf("-XX:MaxPermSize=256m")

                // You can also check the task name to apply options to only the
                // tests you specify.
                if (it.name == "testDebugUnitTest") {
                    systemProperty = mapOf("debug" to "true")
                }
                ...
            }
        }
    }
}

Menggunakan modul pengujian terpisah untuk pengujian berinstrumen

Jika ingin memiliki modul khusus untuk pengujian berinstrumen dan memisahkan kode lainnya dari pengujian, Anda dapat membuat modul pengujian terpisah dan mengonfigurasi build-nya mirip dengan 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. Sinkronkan project dengan mengklik 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, dan 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 di bawah:

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.