Membuat pengujian berinstrumen

Pengujian berinstrumen berjalan pada perangkat Android, baik fisik maupun emulasi. Dengan demikian, mereka dapat memanfaatkan API framework Android. Oleh karena itu, pengujian berinstrumen memberikan lebih banyak fidelitas daripada pengujian lokal, meskipun pengujian tersebut berjalan jauh lebih lambat.

Sebaiknya gunakan pengujian berinstrumen hanya jika Anda harus melakukan pengujian terhadap perilaku perangkat sebenarnya. AndroidX Test menyediakan beberapa library yang mempermudah penulisan pengujian berinstrumen saat diperlukan.

Menyiapkan lingkungan pengujian Anda

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

Sebelum memulai, Anda harus menambahkan AndroidX Test API, yang memungkinkan Anda mem-build dan menjalankan kode pengujian berinstrumen dengan cepat untuk aplikasi Anda. AndroidX Test menyertakan test runner JUnit 4,AndroidJUnitRunner, dan API untuk pengujian UI fungsional seperti Espresso, UI Automator, dan pengujian Compose.

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

Dalam file build.gradle level teratas aplikasi, Anda perlu 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 Catatan Rilis UI Compose.

Untuk menggunakan class pengujian JUnit 4 dan memiliki akses ke fitur seperti pemfilteran pengujian, pastikan untuk menentukan AndroidJUnitRunner sebagai runner instrumentasi pengujian default di project Anda dengan menyertakan setelan berikut dalam file build.gradle level modul aplikasi:

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 mem-build pengujian lokal.

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

Contoh berikut menunjukkan cara menulis pengujian berinstrumen 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 pengujian berinstrumen

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

Referensi lainnya

Pengujian UI biasanya adalah Pengujian berinstrumen yang memverifikasi perilaku UI yang benar. Library tersebut menggunakan framework seperti Espresso atau Compose Test. Untuk mempelajari lebih lanjut, baca panduan pengujian UI.

Untuk mengetahui informasi selengkapnya tentang penggunaan Uji instrumentasi, lihat referensi berikut.

Contoh

Codelab