Menguji interaksi pengguna dalam satu aplikasi membantu memastikan bahwa pengguna tidak mendapatkan hasil yang tidak terduga atau memiliki pengalaman buruk saat berinteraksi dengan aplikasi Anda. Anda harus mempelajari cara membuat pengujian antarmuka pengguna (UI) jika Anda perlu memverifikasi bahwa UI aplikasi Anda berfungsi dengan benar.
Framework pengujian Espresso, yang disediakan oleh AndroidX Test, menyediakan API untuk menulis pengujian UI guna menyimulasikan interaksi pengguna dalam satu aplikasi target. Pengujian Espresso dapat dijalankan di perangkat yang menjalankan Android 2.3.3 (API level 10) dan yang lebih tinggi. Manfaat utama menggunakan Espresso adalah framework pengujian ini menyediakan sinkronisasi tindakan pengujian secara otomatis dengan UI aplikasi yang sedang Anda uji. Espresso mendeteksi kapan thread utama tidak digunakan, sehingga dapat menjalankan perintah pengujian Anda pada waktu yang tepat, yang akan meningkatkan keandalan pengujian. Kemampuan ini juga membebaskan Anda dari keharusan untuk menambah solusi pengaturan waktu, seperti Thread.sleep() dalam kode pengujian Anda.
Framework pengujian Espresso adalah API berbasis instrumentasi dan bekerja dengan runner pengujian AndroidJUnitRunner.
Menyiapkan Espresso
Sebelum membuat pengujian UI Anda dengan Espresso, pastikan untuk menetapkan referensi dependensi ke library Espresso:
dependencies {
androidTestImplementation ‘androidx.test.espresso:espresso-core:3.1.0’
}
Nonaktifkan animasi pada perangkat pengujian Anda. Membiarkan animasi sistem tetap aktif pada perangkat pengujian dapat menyebabkan hasil yang tidak terduga atau dapat menyebabkan pengujian Anda gagal. Nonaktifkan animasi dari Setelan dengan membuka Opsi developer dan nonaktifkan semua opsi berikut:
Skala animasi jendela
Skala animasi transisi
Skala durasi animator
Jika Anda ingin menyiapkan project untuk menggunakan fitur Espresso selain dari fitur yang disediakan core API, lihat panduan khusus untuk Espresso.
Membuat class pengujian Espresso
Untuk membuat pengujian Espresso, ikuti model pemrograman ini:
Simulasikan interaksi pengguna tertentu untuk dijalankan pada komponen UI tersebut, dengan memanggil metode ViewInteraction.perform() atau DataInteraction.perform() dan meneruskan tindakan pengguna (misalnya, klik pada tombol login). Untuk mengurutkan beberapa tindakan pada komponen UI yang sama, gabungkan tindakan tersebut dengan menggunakan daftar yang dipisahkan koma dalam argumen metode Anda.
Bila perlu ulangi langkah-langkah di atas, untuk mensimulasikan alur penggunaan di beberapa aktivitas di aplikasi target.
Gunakan metode ViewAssertions untuk memeriksa apakah UI mencerminkan keadaan atau perilaku yang diharapkan setelah interaksi pengguna ini dilakukan.
Langkah ini dibahas lebih detail di bagian di bawah ini.
Cuplikan kode berikut ini menunjukkan bagaimana class pengujian Anda dapat memanggil alur kerja dasar ini:KotlinJava
onView(withId(R.id.my_view)) // withId(R.id.my_view) is a ViewMatcher
.perform(click()) // click() is a ViewAction
.check(matches(isDisplayed())) // matches(isDisplayed()) is a ViewAssertion
Menggunakan Espresso dengan ActivityTestRule
Bagian berikut menjelaskan cara membuat pengujian Espresso baru dalam gaya JUnit 4 dan menggunakan ActivityTestRule untuk mengurangi jumlah kode boilerplate yang perlu Anda tulis. Dengan menggunakan ActivityTestRule, framework pengujian menjalankan aktivitas yang sedang diuji sebelum setiap metode pengujian yang dianotasikan dengan @Test dan sebelum metode apa pun dianotasi dengan @Before. Framework ini menangani penonaktifan aktivitas setelah pengujian selesai dan semua metode yang dianotasikan dengan @After dijalankan. KotlinJava
package com.example.android.testing.espresso.BasicSample
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import androidx.test.rule.ActivityTestRule
import androidx.test.runner.AndroidJUnit4
@RunWith(AndroidJUnit4::class)
@LargeTest
class ChangeTextBehaviorTest {
private lateinit var stringToBetyped: String
@get:Rule
var activityRule: ActivityTestRule<MainActivity>
= ActivityTestRule(MainActivity::class.java)
@Before
fun initValidString() {
// Specify a valid string.
stringToBetyped = “Espresso”
}
@Test
fun changeText_sameActivity() {
// Type text and then press the button.
onView(withId(R.id.editTextUserInput))
.perform(typeText(stringToBetyped), closeSoftKeyboard())
onView(withId(R.id.changeTextBt)).perform(click())
// Check that the text was changed.
onView(withId(R.id.textToBeChanged))
.check(matches(withText(stringToBetyped)))
}
}
Mengakses komponen UI
Sebelum Espresso dapat berinteraksi dengan aplikasi yang diuji, Anda harus terlebih dahulu menentukan komponen atau tampilan UI. Espresso mendukung penggunaan Hamcrest matcher untuk menentukan tampilan dan adaptor di aplikasi Anda.
Untuk menemukan tampilan, panggil metode <a href=”https://developer.android.com/reference/androidx/test/espresso/Espresso?hl=id#onView(org.hamcrest.MatcheronView() dan teruskan matcher tampilan yang menentukan tampilan yang Anda targetkan. Tindakan ini dijelaskan lebih mendetail di Menentukan matcher tampilan. Metode <a href=”https://developer.android.com/reference/androidx/test/espresso/Espresso?hl=id#onView(org.hamcrest.MatcheronView() menampilkan objek ViewInteraction yang memungkinkan pengujian Anda berinteraksi dengan tampilan. Namun, memanggil metode <a href=”https://developer.android.com/reference/androidx/test/espresso/Espresso?hl=id#onView(org.hamcrest.MatcheronView() mungkin tidak berfungsi jika Anda ingin mencari tampilan dalam tata letak RecyclerView. Dalam hal ini, ikuti instruksi diMenemukan lokasi di AdapterView sebagai gantinya.