Yaygın kalıplar

Compose uygulamanızı geçerli yaklaşım ve kalıplarla test edebilirsiniz.

Tek başına test etme

ComposeTestRule, tüm composable'ları (tam uygulamanızı, tek bir ekran veya küçük bir öğeyi) görüntüleyen bir etkinlik başlatmanıza olanak sağlar. Ayrıca, composable'larınızın doğru şekilde kapsüllendiğinden ve bağımsız olarak çalıştıklarından emin olmak iyi bir uygulamadır. Böylece, daha kolay ve daha odaklanmış kullanıcı arayüzü testleri gerçekleştirilir.

Bu, yalnızca birim kullanıcı arayüzü testlerini oluşturmanız gerektiği anlamına gelmez. Kullanıcı arayüzünün büyük kısmının kapsamını belirlemek de çok önemlidir.

Kendi içeriğinizi oluşturduktan sonra etkinliğe ve kaynaklara erişin

Genellikle test edilmekte olan içeriği composeTestRule.setContent kullanarak ayarlamanız ve ayrıca etkinlik kaynaklarına erişmeniz gerekir. Örneğin, görüntülenen bir metnin bir dize kaynağıyla eşleştiğini doğrulamak için bunu doğrulamanız gerekir. Ancak, createAndroidComposeRule() ile oluşturulmuş bir kuralda setContent işlevi zaten çağırıyorsa bu çağrıyı bulamazsınız.

Bunu başarmak için sıklıkla kullanılan bir kalıp, ComponentActivity gibi boş bir etkinlik kullanarak bir AndroidComposeTestRule oluşturmaktır.

class MyComposeTest {

    @get:Rule
    val composeTestRule = createAndroidComposeRule<ComponentActivity>()

    @Test
    fun myTest() {
        // Start the app
        composeTestRule.setContent {
            MyAppTheme {
                MainScreen(uiState = exampleUiState, /*...*/)
            }
        }
        val continueLabel = composeTestRule.activity.getString(R.string.next)
        composeTestRule.onNodeWithText(continueLabel).performClick()
    }
}

ComponentActivity uygulamasının, uygulamanızın AndroidManifest.xml dosyasına eklenmesi gerektiğini unutmayın. Bu bağımlılığı modülünüze ekleyerek bunu sağlayabilirsiniz:

debugImplementation("androidx.compose.ui:ui-test-manifest:$compose_version")

Özel anlambilim özellikleri

Bilgileri testlere sunmak için özel anlamsal özellikler oluşturabilirsiniz. Bunu yapmak için yeni bir SemanticsPropertyKey tanımlayın ve SemanticsPropertyReceiver kullanarak bunu kullanılabilir hale getirin.

// Creates a semantics property of type Long.
val PickedDateKey = SemanticsPropertyKey<Long>("PickedDate")
var SemanticsPropertyReceiver.pickedDate by PickedDateKey

Şimdi bu özelliği semantics değiştiricisinde kullanın:

val datePickerValue by remember { mutableStateOf(0L) }
MyCustomDatePicker(
    modifier = Modifier.semantics { pickedDate = datePickerValue }
)

Testlerde, özelliğin değerini doğrulamak için SemanticsMatcher.expectValue kullanın:

composeTestRule
    .onNode(SemanticsMatcher.expectValue(PickedDateKey, 1445378400)) // 2015-10-21
    .assertExists()

Eyalet geri yüklemesini doğrulama

Etkinlik veya işlem yeniden oluşturulduğunda Compose öğelerinizin durumunun doğru şekilde geri yüklendiğini doğrulayın. Bu tür kontrolleri, StateRestorationTester sınıfıyla etkinlik yeniden oluşturmaya gerek kalmadan gerçekleştirin.

Bu sınıf, bir composable'ın yeniden oluşturulmasını simüle etmenizi sağlar. Bu, özellikle rememberSaveable kullanımını doğrulamak açısından yararlıdır.


class MyStateRestorationTests {

    @get:Rule
    val composeTestRule = createComposeRule()

    @Test
    fun onRecreation_stateIsRestored() {
        val restorationTester = StateRestorationTester(composeTestRule)

        restorationTester.setContent { MainScreen() }

        // TODO: Run actions that modify the state

        // Trigger a recreation
        restorationTester.emulateSavedInstanceStateRestore()

        // TODO: Verify that state has been correctly restored.
    }
}

Farklı cihaz yapılandırmalarını test etme

Android uygulamalarının pencere boyutları, yerel ayarlar, yazı tipi boyutları, koyu ve açık temalar gibi pek çok değişen koşullara uyum sağlaması gerekir. Bu koşulların çoğu, kullanıcı tarafından kontrol edilen cihaz düzeyindeki değerlerden elde edilir ve geçerli Configuration örneğiyle gösterilir. Testin cihaz düzeyindeki özellikleri yapılandırması gerektiğinden, farklı yapılandırmaları doğrudan testte test etmek zordur.

DeviceConfigurationOverride, test edilen @Composable içeriği için farklı cihaz yapılandırmalarını yerelleştirilmiş bir şekilde simüle etmenizi sağlayan, yalnızca test amaçlı bir API'dir.

DeviceConfigurationOverride öğesinin tamamlayıcı nesnesi, cihaz düzeyinde yapılandırma özelliklerini geçersiz kılan aşağıdaki uzantı işlevlerine sahiptir:

Belirli bir geçersiz kılma işlemi uygulamak için test edilen içeriği, parametre olarak uygulanacak geçersiz kılmayı ileterek DeviceConfigurationOverride() üst düzey işlevine yapılan bir çağrıya sarmalayın.

Örneğin, aşağıdaki kod, yoğunluğu yerel olarak değiştirmek için DeviceConfigurationOverride.ForcedSize() geçersiz kılmasını uygular ve testin çalıştırıldığı cihaz doğrudan söz konusu pencere boyutunu desteklemese bile MyScreen composable'ı büyük bir yatay pencerede oluşturulmaya zorlar:

composeTestRule.setContent {
    DeviceConfigurationOverride(
        DeviceConfigurationOverride.ForcedSize(DpSize(1280.dp, 800.dp))
    ) {
        MyScreen() // will be rendered in the space for 1280dp by 800dp without clipping
    }
}

Birden fazla geçersiz kılma işlemini birlikte uygulamak için DeviceConfigurationOverride.then() parametresini kullanın:

composeTestRule.setContent {
    DeviceConfigurationOverride(
        DeviceConfigurationOverride.FontScale(1.5f) then
            DeviceConfigurationOverride.FontWeightAdjustment(200)
    ) {
        Text(text = "text with increased scale and weight")
    }
}

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.