Oluşturma testleri, varsayılan olarak kullanıcı arayüzünüzle senkronize edilir. Bir
ComposeTestRule
ile bir işlem gerçekleştirirseniz test senkronize edilir
kullanıcı arayüzü ağacı boşta olana kadar bekler.
Normalde herhangi bir işlem yapmanız gerekmez. Ancak, bazı uç örnekler bilmeniz gereken önemli noktalardır.
Bir test senkronize edildiğinde, Compose uygulamanız sanal saattir. Bu durum, Compose testlerinin gerçek zamanlı olarak çalışmadığı ve söz konusu testlerin sınavı geçebileceği anlamına gelir. hızlı teslim etmek üzerine.
Ancak, testlerinizi senkronize eden yöntemleri kullanmazsanız yeniden oluşturma işlemi gerçekleşir ve kullanıcı arayüzü duraklatılmış olarak görünür.
@Test
fun counterTest() {
val myCounter = mutableStateOf(0) // State that can cause recompositions.
var lastSeenValue = 0 // Used to track recompositions.
composeTestRule.setContent {
Text(myCounter.value.toString())
lastSeenValue = myCounter.value
}
myCounter.value = 1 // The state changes, but there is no recomposition.
// Fails because nothing triggered a recomposition.
assertTrue(lastSeenValue == 1)
// Passes because the assertion triggers recomposition.
composeTestRule.onNodeWithText("1").assertExists()
}
Bu gereksinimin yalnızca Compose hiyerarşileri için geçerli olduğunu, kullanın.
Otomatik senkronizasyonu devre dışı bırakın
ComposeTestRule
aracılığıyla şunun gibi bir onay veya işlem çağırdığınızda:
assertExists()
, testiniz Compose kullanıcı arayüzüyle senkronize edildi. Bazı durumlarda
bu senkronizasyonu durdurup saati kendiniz kontrol etmek isteyebilirsiniz. Örneğin,
Örneğin, animasyonun doğru ekran görüntülerini almak için zamanı kontrol edebilirsiniz.
bir nokta koyabiliriz. Otomatik senkronizasyonu devre dışı bırakmak için
mainClock
içindeki autoAdvance
özelliğini false
olarak ayarlayın:
composeTestRule.mainClock.autoAdvance = false
Bu durumda genellikle süreyi kendiniz ilerletirsiniz. Tam olarak bir tane ilerleyebilirsiniz
belirli bir süreye göre veya advanceTimeByFrame()
ile
advanceTimeBy()
:
composeTestRule.mainClock.advanceTimeByFrame()
composeTestRule.mainClock.advanceTimeBy(milliseconds)
Boşta kaynaklar
Compose, testleri ve kullanıcı arayüzünü senkronize edebilir. Böylece, her eylem ve onay boşta kaldığında, gerektiği şekilde bekleyerek veya ilerleterek yapılır. Ancak bazı Sonuçları kullanıcı arayüzü durumunu etkileyen eşzamansız işlemler arka planda çalışmaya devam edebilir.
Bu boşta kalma kaynaklarını testinize oluşturup kaydedin. dikkate alınır. Hayır veya deneme sürümü için ek boşta kalma kaynakları kaydetmeniz gerekmiyorsa Örneğin, Espresso veya Espresso ile senkronize edilmeyen bir arka plan işi Oluştur'u tıklayın.
Bu API, Espresso'nun Idling Resources (Idling Kaynakları) API'sine çok benzer,
test edilen kişi boşta veya meşgulse. Kaydetmek için Oluştur test kuralını kullanma
IdlingResource
uygulanması.
composeTestRule.registerIdlingResource(idlingResource)
composeTestRule.unregisterIdlingResource(idlingResource)
Manuel senkronizasyon
Bazı durumlarda, Oluştur kullanıcı arayüzünü testiniz veya test ettiğiniz uygulama olabilir.
waitForIdle()
işlevi, Compose'un boşta kalmasını bekler ancak işlev
autoAdvance
özelliğine bağlıdır:
composeTestRule.mainClock.autoAdvance = true // Default
composeTestRule.waitForIdle() // Advances the clock until Compose is idle.
composeTestRule.mainClock.autoAdvance = false
composeTestRule.waitForIdle() // Only waits for idling resources to become idle.
Her iki durumda da waitForIdle()
işlevinin beklemedeki çizim ve düzen işlemlerini de beklediğini unutmayın.
pasaport ekleyin.
Ayrıca, belirli bir koşul karşılanana kadar saati ilerletebilirsiniz.
advanceTimeUntil()
.
composeTestRule.mainClock.advanceTimeUntil(timeoutMs) { condition }
Belirtilen koşulun, etkilenebilecek durumu kontrol etmesi gerektiğini unutmayın bu saate göre ayarlar (yalnızca Oluştur durumunda çalışır).
Koşulları bekleyin
Veri yükleme veya Android'in
veya çizim (yani Compose'un dışında ölçüm veya çizim) için
waitUntil()
gibi daha genel kavramları içerir:
composeTestRule.waitUntil(timeoutMs) { condition }
Ayrıca,
waitUntil
yardımcılar:
composeTestRule.waitUntilAtLeastOneExists(matcher, timeoutMs)
composeTestRule.waitUntilDoesNotExist(matcher, timeoutMs)
composeTestRule.waitUntilExactlyOneExists(matcher, timeoutMs)
composeTestRule.waitUntilNodeCount(matcher, count, timeoutMs)
Ek Kaynaklar
- Android'de uygulamaları test etme: Ana Android testi açılış sayfası, testin temellerini ve tekniklerini daha kapsamlı bir şekilde gösterir.
- Testle ilgili temel bilgiler: Daha fazla bilgi bir Android uygulamasını test etmenin arkasındaki temel kavramlar hakkında.
- Yerel testler: Bazı testler yapabilirsiniz yerel olarak, kendi iş istasyonunuzda.
- Araçlı testler: İyidir araçlı testleri de yapma alıştırması yapacaksınız. Yani doğrudan yürütülen testler cihaz üzerinde.
- Sürekli entegrasyon: Sürekli entegrasyon, testlerinizi dağıtımınıza entegre etmenizi sağlar ardışık düzendir.
- Farklı ekran boyutlarını test edin: birçok cihaz varsa bunları farklı ekranlarla test etmeniz gerekir seçin.
- Espresso: Görüntülemeye dayalı olarak tasarlanmıştır. Kullanıcı arayüzleri, Espresso bilgisi Compose'un bazı yönleri için yine de yararlı olabilir teşvik etmek anlamına gelir.