Birlikte çalışabilirlik

Oluşturma, yaygın test çerçeveleriyle entegre olur.

Espresso ile birlikte çalışabilirlik

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

Her iki türle de eşleştirmek için gereken özel bir adım yoktur. Görünümleri Espresso'nun onView ve Compose öğeleriyle ComposeTestRule öğelerini eşleştirebilirsiniz.

@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 yardımcı tanımlayıcıları (gösterilen metin, içerik açıklaması vb.) göre erişilebilir. Modifier.testTag kullanan herhangi bir composable'a erişmek istiyorsanız ilgili composable'ın alt ağacı için testTagsAsResourceId semantik özelliğini etkinleştirmeniz gerekir. Bu davranışı etkinleştirmek, kaydırılabilir composable'lar (ör. LazyColumn) gibi başka bir benzersiz herkese açık kullanıcı adı olmayan composable'lar için yararlıdır.

Modifier.testTag ile iç içe yerleştirilmiş tüm composable'lara UiAutomator'dan erişilebildiğinden emin olmak için anlamsal özelliği composables hiyerarşinizde yalnızca bir kez yüksek olacak şekilde 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 tüm composable'lara resourceName ile aynı tag kullanılarak By.res(resourceName) kullanılarak 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: Ana Android testi açılış sayfası, testlerle ilgili temel bilgiler ve tekniklere dair daha kapsamlı bir bakış sunar.
  • Testlerle ilgili temel bilgiler: Android uygulamalarını test etmenin ardındaki temel kavramlar hakkında daha fazla bilgi edinin.
  • Yerel testler: Kendi iş istasyonunuzda yerel olarak bazı testler yapabilirsiniz.
  • Araçlı testler: Araçlı testler de çalıştırmak iyi bir uygulamadır. Yani, doğrudan cihaz üzerinde yapılan 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 kullanımına sunulan çok sayıda cihaz arasından farklı ekran boyutlarını test etmeniz gerekir.
  • Espresso: Görünüm tabanlı kullanıcı arayüzlerinde kullanılmak üzere tasarlanmış olsa da Espresso bilgisi, Oluşturma testinin bazı bölümlerinde yine de yararlı olabilir.