Membuat pengujian berinstrumen

Pengujian berinstrumen berjalan di perangkat Android, baik fisik maupun emulasi. Sebagai demikian, mereka bisa memanfaatkan API framework Android. Pengujian berinstrumen oleh karena itu memberikan lebih banyak {i>fidelity <i}daripada tes lokal, meskipun pengujian ini berjalan lebih perlahan.

Sebaiknya gunakan uji instrumentasi hanya jika Anda harus melakukan pengujian dengan perilaku perangkat nyata. AndroidX Test menyediakan beberapa library yang memudahkan penulisan uji instrumentasi jika diperlukan.

Menyiapkan lingkungan pengujian Anda

Dalam project Android Studio, Anda menyimpan file sumber untuk instrumentasi pengujian di module-name/src/androidTest/java/. Direktori ini sudah ada saat Anda membuat proyek baru dan berisi contoh uji instrumentasi.

Sebelum memulai, Anda harus menambahkan AndroidX Test API, yang memungkinkan Anda membuat dan menjalankan kode pengujian berinstrumen untuk aplikasi Anda. AndroidX Test menyertakan Runner pengujian JUnit 4 ,AndroidJUnitRunner, dan API untuk pengujian UI fungsional seperti Espresso, UI Automator, dan pengujian Compose.

Anda juga perlu mengonfigurasi dependensi pengujian Android untuk project Anda agar menggunakan runner pengujian dan API aturan yang disediakan oleh AndroidX Test.

Di file build.gradle tingkat teratas aplikasi, Anda harus menentukan library ini sebagai dependensi:

dependencies {
    androidTestImplementation "androidx.test:runner:$androidXTestVersion"
    androidTestImplementation "androidx.test:rules:$androidXTestVersion"
    // Optional -- UI testing with Espresso
    androidTestImplementation "androidx.test.espresso:espresso-core:$espressoVersion"
    // Optional -- UI testing with UI Automator
    androidTestImplementation "androidx.test.uiautomator:uiautomator:$uiAutomatorVersion"
    // Optional -- UI testing with Compose
    androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version"
}

Anda dapat menemukan versi terbaru di Catatan Rilis AndroidX dan Compose Catatan Rilis UI.

Untuk menggunakan kelas pengujian JUnit 4 dan mendapatkan akses ke fitur-fitur seperti penyaringan pengujian, pastikan untuk menentukan AndroidJUnitRunner sebagai instrumentasi pengujian default di project Anda dengan menyertakan setelan berikut dalam atribut file build.gradle level modul:

android {
    defaultConfig {
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
}

Membuat class pengujian berinstrumen

Class pengujian berinstrumen Anda harus berupa class pengujian JUnit 4 yang serupa dengan class yang dijelaskan di bagian tentang cara membuat pengujian lokal.

Untuk membuat class pengujian JUnit 4 berinstrumen, tentukan AndroidJUnit4 sebagai runner pengujian default.

Contoh berikut menunjukkan cara menulis uji instrumentasi untuk memverifikasi bahwa antarmuka Parcelable diterapkan dengan benar untuk Class LogHistory:

Kotlin

import android.os.Parcel
import android.text.TextUtils.writeToParcel
import androidx.test.filters.SmallTest
import androidx.test.runner.AndroidJUnit4
import com.google.common.truth.Truth.assertThat
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith

const val TEST_STRING = "This is a string"
const val TEST_LONG = 12345678L

// @RunWith is required only if you use a mix of JUnit3 and JUnit4.
@RunWith(AndroidJUnit4::class)
@SmallTest
class LogHistoryAndroidUnitTest {
    private lateinit var logHistory: LogHistory

    @Before
    fun createLogHistory() {
        logHistory = LogHistory()
    }

    @Test
    fun logHistory_ParcelableWriteRead() {
        val parcel = Parcel.obtain()
        logHistory.apply {
            // Set up the Parcelable object to send and receive.
            addEntry(TEST_STRING, TEST_LONG)

            // Write the data.
            writeToParcel(parcel, describeContents())
        }

        // After you're done with writing, you need to reset the parcel for reading.
        parcel.setDataPosition(0)

        // Read the data.
        val createdFromParcel: LogHistory = LogHistory.CREATOR.createFromParcel(parcel)
        createdFromParcel.getData().also { createdFromParcelData: List<Pair<String, Long>> ->

            // Verify that the received data is correct.
            assertThat(createdFromParcelData.size).isEqualTo(1)
            assertThat(createdFromParcelData[0].first).isEqualTo(TEST_STRING)
            assertThat(createdFromParcelData[0].second).isEqualTo(TEST_LONG)
        }
    }
}

Java

import android.os.Parcel;
import android.util.Pair;
import androidx.test.runner.AndroidJUnit4;
import com.google.common.truth.Truth.assertThat;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

// @RunWith is required only if you use a mix of JUnit3 and JUnit4.
@RunWith(AndroidJUnit4.class)
public class LogHistoryAndroidUnitTest {

    public static final String TEST_STRING = "This is a string";
    public static final long TEST_LONG = 12345678L;
    private LogHistory mLogHistory;

    @Before
    public void createLogHistory() {
        mLogHistory = new LogHistory();
    }

    @Test
    public void logHistory_ParcelableWriteRead() {
        // Set up the Parcelable object to send and receive.
        mLogHistory.addEntry(TEST_STRING, TEST_LONG);

        // Write the data.
        Parcel parcel = Parcel.obtain();
        mLogHistory.writeToParcel(parcel, mLogHistory.describeContents());

        // After you're done with writing, you need to reset the parcel for reading.
        parcel.setDataPosition(0);

        // Read the data.
        LogHistory createdFromParcel = LogHistory.CREATOR.createFromParcel(parcel);
        List<Pair<String, Long>> createdFromParcelData
                = createdFromParcel.getData();

        // Verify that the received data is correct.
        assertThat(createdFromParcelData.size()).isEqualTo(1);
        assertThat(createdFromParcelData.get(0).first).isEqualTo(TEST_STRING);
        assertThat(createdFromParcelData.get(0).second).isEqaulTo(TEST_LONG);
    }
}

Menjalankan uji instrumentasi

Pengujian berinstrumen dapat dijalankan pada perangkat atau emulator sungguhan. Di Android Panduan Studio, Anda dapat mempelajari cara:

Referensi lainnya

Pengujian UI biasanya adalah Pengujian berinstrumen yang memverifikasi perilaku yang benar dari UI. Alat tersebut menggunakan framework seperti Espresso atau Compose Test. Untuk mempelajari selengkapnya, baca Panduan pengujian UI.

Untuk mengetahui informasi selengkapnya tentang penggunaan Uji instrumentasi, lihat referensi Google Cloud Platform.

Contoh

Codelab