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 berjalan lebih lambat.
Sebaiknya gunakan pengujian berinstrumen hanya jika Anda harus menguji perilaku perangkat sebenarnya. AndroidX Test menyediakan beberapa library yang mempermudah penulisan pengujian berinstrumen saat diperlukan.
Menyiapkan lingkungan pengujian Anda
Dalam project Android Studio, simpan 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 mencakup
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 dapat menggunakan runner pengujian dan API aturan yang disediakan oleh AndroidX Test.
Di 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 dalam 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 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 merupakan Pengujian berinstrumen yang memverifikasi perilaku UI yang benar. Pengujian tersebut menggunakan framework seperti Espresso atau Compose Test. Untuk mempelajari lebih lanjut, baca panduan pengujian UI.
Untuk informasi selengkapnya tentang penggunaan Uji instrumentasi, lihat referensi berikut.