Espresso ile Kullanıcı Arayüzü Testi
Espresso ile otomatik kullanıcı arayüzü testleri yazın. Görünümleri onView() ile bulun, perform() ile etkileşim kurun, durumu check() ile doğrulayın ve RecyclerView etkileşimlerini test edin.
Espresso ile Kullanıcı Arayüzü Testi, CoddyKit'te ücretsiz bir Android Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Android Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Android Academy kursu toplamda 4 dersten oluşur.
Espresso Nedir?
Espresso, Android'in resmî kullanıcı arayüzü test çerçevesidir. Uygulamanızın kullanıcı arayüzüyle etkileşime giren testler yazmanızı sağlar — düğmelere dokunma, metin yazma, listeleri kaydırma — ve ekranda neyin görüntülendiğini doğrular.
Espresso bir cihazda veya emülatörde (enstrümante test) çalışır ve kullanıcı arayüzü iş parçacığıyla otomatik olarak eşzamanlanır — hataya açık sleep() çağrılarına gerek kalmaz.
Kurulum
Espresso, Android test araç setine dahildir. Bu bağımlılıkları app/build.gradle dosyasına ekleyin:
// app/build.gradle:
android {
defaultConfig {
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
}
dependencies {
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.5.1' // RecyclerView
}ActivityScenarioRule
Her testten önce bir Activity başlatmak ve sonra kapatmak için ActivityScenarioRule kullanın:
@RunWith(AndroidJUnit4::class)
class LoginActivityTest {
@get:Rule
val activityRule = ActivityScenarioRule(LoginActivity::class.java)
@Test
fun `login button is displayed`() {
onView(withId(R.id.btnLogin))
.check(matches(isDisplayed()))
}
}onView() ve ViewMatchers
onView(matcher), geçerli hiyerarşideki bir görünümü bulur. Hassas sonuçlar için eşleştiricileri birleştirin:
// Match by ID:
onView(withId(R.id.tvTitle))
// Match by text:
onView(withText("Submit"))
// Match by content description (for accessibility):
onView(withContentDescription("Close dialog"))
// Combine matchers:
onView(allOf(withId(R.id.btnSave), isEnabled()))
// Inside a specific parent:
onView(withId(R.id.btnSave)).inRoot(isDialog())ViewActions — Görünümlerle Etkileşim
Bir görünümü bulduktan sonra .perform() ile bir eylem gerçekleştirin:
// Tap a button:
onView(withId(R.id.btnLogin)).perform(click())
// Type into an EditText:
onView(withId(R.id.etEmail))
.perform(typeText("alice@example.com"), closeSoftKeyboard())
// Clear text and retype:
onView(withId(R.id.etPassword))
.perform(clearText(), typeText("secret123"), closeSoftKeyboard())
// Scroll to a view:
onView(withId(R.id.btnSubmit)).perform(scrollTo(), click())
// Long press:
onView(withId(R.id.ivImage)).perform(longClick())ViewAssertions — Durumu Doğrulama
.check() ile ekranda ne gösterildiğini denetleyin:
// View is displayed:
onView(withId(R.id.tvError)).check(matches(isDisplayed()))
// View has specific text:
onView(withId(R.id.tvTitle)).check(matches(withText("Welcome!")))
// View is not displayed (GONE or INVISIBLE):
onView(withId(R.id.progressBar)).check(matches(not(isDisplayed())))
// View is enabled:
onView(withId(R.id.btnSave)).check(matches(isEnabled()))
// View does not exist:
onView(withId(R.id.tvError)).check(doesNotExist())Eksiksiz Giriş Testi
Kimlik bilgilerini yazıp giriş düğmesine dokunan eksiksiz bir test:
@Test
fun `successful login shows home screen`() {
// Type email
onView(withId(R.id.etEmail))
.perform(typeText("alice@example.com"), closeSoftKeyboard())
// Type password
onView(withId(R.id.etPassword))
.perform(typeText("password123"), closeSoftKeyboard())
// Tap login button
onView(withId(R.id.btnLogin)).perform(click())
// Assert welcome message is shown
onView(withId(R.id.tvWelcome))
.check(matches(withText("Welcome, Alice!")))
}RecyclerView Testi
Liste öğeleriyle etkileşim kurmak için espresso-contrib içindeki RecyclerViewActions bileşenini kullanın:
import androidx.test.espresso.contrib.RecyclerViewActions
@Test
fun `clicking item opens detail screen`() {
// Scroll to position 5 and click:
onView(withId(R.id.recyclerView))
.perform(RecyclerViewActions.actionOnItemAtPosition<RecyclerView.ViewHolder>(
5, click()
))
// Assert detail screen is shown:
onView(withId(R.id.tvDetailTitle)).check(matches(isDisplayed()))
}Girdi Doğrulama Testi
Girdi geçersiz olduğunda hata mesajlarının göründüğünü doğrulayın:
@Test
fun `empty email shows error message`() {
// Leave email blank, tap login
onView(withId(R.id.btnLogin)).perform(click())
// Assert error is shown
onView(withId(R.id.tilEmail))
.check(matches(hasDescendant(withText("Email is required"))))
}
@Test
fun `short password shows error`() {
onView(withId(R.id.etPassword))
.perform(typeText("123"), closeSoftKeyboard())
onView(withId(R.id.btnLogin)).perform(click())
onView(withId(R.id.tilPassword))
.check(matches(hasDescendant(withText("Minimum 6 characters"))))
}Boşta Kalma Kaynakları
Espresso, kullanıcı arayüzü iş parçacığının boşta kalmasını otomatik olarak bekler; ancak ağ çağrılarını veya korutinleri beklemez. Espresso'ya eşzamansız işiniz için beklemesini söylemek üzere IdlingResource kullanın:
// CountingIdlingResource: increment before async work, decrement when done
val idlingResource = CountingIdlingResource("NetworkCall")
// In your ViewModel/Repository:
idlingResource.increment()
viewModelScope.launch {
loadData()
idlingResource.decrement()
}
// In test setUp:
@Before
fun setUp() {
IdlingRegistry.getInstance().register(idlingResource)
}
@After
fun tearDown() {
IdlingRegistry.getInstance().unregister(idlingResource)
}Espresso Testlerini Çalıştırma
Enstrümante testleri bağlı bir cihazda veya emülatörde çalıştırın:
- Android Studio'da: bir test sınıfına sağ tıklayın → Çalıştır
- Terminal üzerinden:
./gradlew connectedAndroidTest - Sonuçlar
app/build/reports/androidTests/içinde görünür
Kararlı ve hızlı test çalıştırmaları için Android Emulator API 28 veya sonraki bir sürümü kullanın. Kararsız sonuçları önlemek için geliştirici ayarlarındaki animasyonları devre dışı bırakın.
Hızlı Kontrol
Bir görünümü bulup metnini denetlemek için doğru Espresso kalıbı nedir?
Özet: Espresso ile Kullanıcı Arayüzü Testi
Otomatik kullanıcı arayüzü testi, gerilemeleri kullanıcılar fark etmeden yakalar:
onView(matcher)— bir görünüm bulur.perform(action)— dokunur, metin yazar, kaydırır.check(matches(...))— görünürlüğü, metni ve durumu doğrular- Liste etkileşimleri için
RecyclerViewActions - Eşzamansız işlemler için
IdlingResource - Kararsız testleri önlemek için sistem animasyonlarını devre dışı bırakın
Sırada: uygulamanızda profesyonelce hata ayıklama ve profil oluşturma.
Sıkça Sorulan Sorular
“Espresso ile Kullanıcı Arayüzü Testi” dersi ücretsiz mi?
Evet — “Espresso ile Kullanıcı Arayüzü Testi” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Android Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Android Academy kursu toplamda 4 dersten oluşur.
“Espresso ile Kullanıcı Arayüzü Testi” dersinde ne öğreneceğim?
Espresso ile otomatik kullanıcı arayüzü testleri yazın. Görünümleri onView() ile bulun, perform() ile etkileşim kurun, durumu check() ile doğrulayın ve RecyclerView etkileşimlerini test edin. Android Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Android Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Android Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Espresso ile Kullanıcı Arayüzü Testi” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Android Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Android Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- JUnit ile Birim Testi
- Mockito ile Taklit Nesneler
- Espresso ile Kullanıcı Arayüzü Testi
- Hata Ayıklama ve Profil Oluşturma