Birlikte çalışabilirlik

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

Espresso ile birlikte çalışabilirlik

Karma uygulamalarda, Oluştur bileşenlerini görünüm hiyerarşilerinde ve görünümlerinde Compose composable'larında (AndroidView composable aracılığıyla) bulabilirsiniz.

Bu iki türle eşleştirmek için herhangi bir özel adım gerçekleştirmeniz gerekmez. Görünümleri Espresso'nun onView ile, Espresso öğ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 (gösterilen metin, içerik açıklaması vb.) aracılığıyla erişilebilir. Modifier.testTag kullanan herhangi bir composable'a erişmek istiyorsanız ilgili composable'ın alt ağacı için testTagsAsResourceId anlamsal özelliğini etkinleştirmeniz gerekir. Bu davranışın etkinleştirilmesi, kaydırılabilir composable'lar (örneğin, LazyColumn) gibi başka bir benzersiz herkese açık kullanıcı adı olmayan composable'lar için faydalıdır.

Modifier.testTag öğesine sahip iç içe yerleştirilmiş tüm composable'ların UiAutomator'dan erişilebilir olmasını sağlamak için anlamsal özelliği composable hiyerarşinizde yalnızca bir kez 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) öğesine sahip herhangi bir composable, 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ı, testle ilgili temel bilgiler ve teknikler hakkında daha kapsamlı bir görünüm sağlar.
  • Testin temelleri: Android uygulamasını test etmenin temel kavramları hakkında daha fazla bilgi edinin.
  • Yerel testler: Bazı testleri yerel olarak kendi iş istasyonunuzda çalıştırabilirsiniz.
  • Araçlı testler: Araçlı testleri de çalıştırmak iyi bir uygulamadır. Yani doğrudan cihaz üzerinde ç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 kullanımına sunulan bazı cihazlar söz konusu olduğunda, farklı ekran boyutlarını test etmeniz gerekir.
  • Espresso: View tabanlı kullanıcı arayüzlerine yönelik olsa da Espresso bilgisi, Compose testinin bazı yönlerinde yararlı olabilir.