0Pricing
Android Academy · Ders

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

  1. JUnit ile Birim Testi
  2. Mockito ile Taklit Nesneler
  3. Espresso ile Kullanıcı Arayüzü Testi
  4. Hata Ayıklama ve Profil Oluşturma
← Android Academy Sayfasına Dön