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:
DeviceConfigurationOverride.DarkMode()
: Sistemi koyu tema veya açık tema ile geçersiz kılar.DeviceConfigurationOverride.FontScale()
: Sistem yazı tipi ölçeğini geçersiz kılar.DeviceConfigurationOverride.FontWeightAdjustment()
: Sistem yazı tipi ağırlık ayarlamasını geçersiz kılar.DeviceConfigurationOverride.ForcedSize()
: Cihaz boyutundan bağımsız olarak belirli bir miktarda alan kullanılmasını sağlar.DeviceConfigurationOverride.LayoutDirection()
: Düzen yönünü (soldan sağa veya sağdan sola) geçersiz kılar.DeviceConfigurationOverride.Locales()
: Yerel ayarı geçersiz kılar.DeviceConfigurationOverride.RoundScreen()
: Ekran yuvarlak ise geçersiz kılar.
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.