Birlikte çalışabilirlik

Compose, yaygın test çerçeveleriyle entegre olur.

Espresso ile birlikte çalışabilirlik

Karma uygulamalarda, görünüm hiyerarşileri içinde Compose bileşenlerini ve Compose composable'ları içinde görünümleri (AndroidView composable'ı aracılığıyla) bulabilirsiniz.

Her iki türü de eşleştirmek için özel bir işlem yapmanız gerekmez. Görünümleri Espresso'nun onView ile, Compose öğelerini ise ComposeTestRule ile eşleştirirsiniz.

@Test
fun androidViewInteropTest() {
    // Check the initial state of a TextView that depends on a Compose state.
    Espresso.onView(withText("Hello Views")).check(matches(isDisplayed()))
    // Click on the Compose button that changes the state.
    composeTestRule.onNodeWithText("Click here").performClick()
    // Check the new value.
    Espresso.onView(withText("Hello Compose")).check(matches(isDisplayed()))
}

UiAutomator ile birlikte çalışabilirlik

Varsayılan olarak, composable'lara UiAutomator'dan yalnızca uygun tanımlayıcılarıyla (görüntülenen metin, içerik açıklaması vb.) erişilebilir. Modifier.testTag kullanan bir composable'a erişmek istiyorsanız ilgili composable'ın alt ağacı için testTagsAsResourceId anlamsal özelliğini etkinleştirmeniz gerekir. Bu davranışı etkinleştirmek, kaydırılabilir composable'lar (ör. LazyColumn) gibi başka benzersiz tutma yeri olmayan composable'lar için kullanışlıdır.

Modifier.testTag içeren tüm iç içe yerleştirilmiş composable'lara UiAutomator'dan erişilebilmesi için semantik özelliği composable'lar hiyerarşinizde yalnızca bir kez yüksekte etkinleştirin.

Scaffold(
    // Enables for all composables in the hierarchy.
    modifier = Modifier.semantics {
        testTagsAsResourceId = true
    }
){
    // Modifier.testTag is accessible from UiAutomator for composables nested here.
    LazyColumn(
        modifier = Modifier.testTag("myLazyColumn")
    ){
        // Content
    }
}

Modifier.testTag(tag) ile oluşturulan tüm composable'lara, resourceName ile aynı tag kullanılarak By.res(resourceName) ile erişilebilir.

val device = UiDevice.getInstance(getInstrumentation())

val lazyColumn: UiObject2 = device.findObject(By.res("myLazyColumn"))
// Some interaction with the lazyColumn.

Ek Kaynaklar

  • Android'de uygulamaları test etme: Android'deki ana test giriş sayfası, testlerle ilgili temel bilgiler ve teknikler hakkında daha geniş bir bakış açısı sunar.
  • Testin temelleri: Android uygulamasını test etmenin temel kavramları hakkında daha fazla bilgi edinin.
  • Yerel testler: Bazı testleri kendi iş istasyonunuzda yerel olarak çalıştırabilirsiniz.
  • Araçlı testler: Araçlı testler de çalıştırmak iyi bir uygulamadır. Yani doğrudan cihazda çalışan testler.
  • Sürekli entegrasyon: Sürekli entegrasyon, testlerinizi dağıtım ardışık düzeninize entegre etmenize olanak tanır.
  • Farklı ekran boyutlarını test edin: Kullanıcıların erişebileceği çok sayıda cihaz olduğundan farklı ekran boyutlarını test etmeniz gerekir.
  • Espresso: Görüntüleme tabanlı kullanıcı arayüzleri için tasarlanmış olsa da Espresso bilgisi, Compose testinin bazı yönlerinde faydalı olabilir.