API'leri test etme

Kullanıcı arayüzü öğeleriyle etkileşim kurmanın üç ana yolu vardır:

  • Bulucular, herhangi bir öğeyi (veya düğüm) bir veya daha fazla öğeyi anlamları ağacı) kullanır.
  • Onaylar, öğelerin var olduğunu veya belirli alanlara sahip olduğunu doğrulamak için kullanılır. özellikleri hakkında daha fazla bilgi edinin.
  • İşlemler, simüle edilmiş kullanıcı etkinliklerini öğelere ekler. Örneğin, başka hareketler de var.

Bu API'lerin bazıları, bir veya daha fazla yönergeyi belirtmek için SemanticsMatcher öğesini kabul eder düğümlerini tıklayın.

Bulucular

Bir veya daha fazla düğüm seçmek için onNode ve onAllNodes tuşlarını kullanabilirsiniz ancak en yaygın kullanım süreleri için kolaylık sağlayan bulucular da onNodeWithText gibi aramalar ve onNodeWithContentDescription Tam listeye göz atabilirsiniz: Test ile ilgili yardımcı kısa bilgiler oluşturun.

Tek bir düğüm seçin

composeTestRule.onNode(<<SemanticsMatcher>>, useUnmergedTree = false): SemanticsNodeInteraction
// Example
composeTestRule
    .onNode(hasText("Button")) // Equivalent to onNodeWithText("Button")

Birden çok düğüm seçin

composeTestRule
    .onAllNodes(<<SemanticsMatcher>>): SemanticsNodeInteractionCollection
// Example
composeTestRule
    .onAllNodes(hasText("Button")) // Equivalent to onAllNodesWithText("Button")

Birleştirilen ağaç

Bazı düğümler alt öğelerinin anlamsal bilgilerini birleştirir. Örneğin, düğme, metin öğesi etiketlerini birleştirir:

MyButton {
    Text("Hello")
    Text("World")
}

Bir testte, printToLog() işlevini kullanarak anlam ağacını gösterin:

composeTestRule.onRoot().printToLog("TAG")

Bu kod aşağıdaki çıkışı yazdırır:

Node #1 at (...)px
 |-Node #2 at (...)px
   Role = 'Button'
   Text = '[Hello, World]'
   Actions = [OnClick, GetTextLayoutResult]
   MergeDescendants = 'true'

Birleştirilen ağacın bir düğümünü eşlemeniz gerekiyorsa useUnmergedTree - true:

composeTestRule.onRoot(useUnmergedTree = true).printToLog("TAG")

Bu kod aşağıdaki çıkışı yazdırır:

Node #1 at (...)px
 |-Node #2 at (...)px
   OnClick = '...'
   MergeDescendants = 'true'
    |-Node #3 at (...)px
    | Text = '[Hello]'
    |-Node #5 at (83.0, 86.0, 191.0, 135.0)px
      Text = '[World]'

useUnmergedTree parametresi tüm bulucularda kullanılabilir. Örneğin, burada onNodeWithText bulucuda kullanılıyor.

composeTestRule
    .onNodeWithText("World", useUnmergedTree = true).assertIsDisplayed()

Onaylamalar

SemanticsNodeInteraction üzerinde assert() yöntemini çağırarak onayları kontrol edin bulan kişi tarafından bir veya daha fazla eşleştiriciyle döndürüldü:

// Single matcher:
composeTestRule
    .onNode(matcher)
    .assert(hasText("Button")) // hasText is a SemanticsMatcher

// Multiple matchers can use and / or
composeTestRule
    .onNode(matcher).assert(hasText("Button") or hasText("Button2"))

En yaygın iddialar için şu gibi kolaylık işlevlerini de kullanabilirsiniz: assertExists, assertIsDisplayed ve assertTextEquals. Tam listeye Test Etme ile ilgili yardımcı kısa bilgiler bölümünden göz atabilirsiniz.

Bir düğüm koleksiyonundaki onayları kontrol eden işlevler de vardır:

// Check number of matched nodes
composeTestRule
    .onAllNodesWithContentDescription("Beatle").assertCountEquals(4)
// At least one matches
composeTestRule
    .onAllNodesWithContentDescription("Beatle").assertAny(hasTestTag("Drummer"))
// All of them match
composeTestRule
    .onAllNodesWithContentDescription("Beatle").assertAll(hasClickAction())

İşlemler

Bir düğüme işlem eklemek için perform…() işlevini çağırın:

composeTestRule.onNode(...).performClick()

Bazı işlem örnekleri aşağıda verilmiştir:

performClick(),
performSemanticsAction(key),
performKeyPress(keyEvent),
performGesture { swipeLeft() }

Tam listeye göz atabilirsiniz: Test ile ilgili yardımcı kısa bilgiler oluşturun.

Eşleştiriciler

Compose'unuzu test etmek için çeşitli eşleştiriciler kullanılabilir girin.

Hiyerarşik eşleştiriciler

Hiyerarşik eşleştiriciler, anlam ağacında yukarı veya aşağı gidip yukarı veya aşağı tüketilmesine eşleştirmeye karar verdi.

fun hasParent(matcher: SemanticsMatcher): SemanticsMatcher
fun hasAnySibling(matcher: SemanticsMatcher): SemanticsMatcher
fun hasAnyAncestor(matcher: SemanticsMatcher): SemanticsMatcher
fun hasAnyDescendant(matcher: SemanticsMatcher):  SemanticsMatcher

Aşağıda, kullanılan bu eşleştiricilerin bazı örnekleri verilmiştir:

composeTestRule.onNode(hasParent(hasText("Button")))
    .assertIsDisplayed()

Seçiciler

Test oluşturmanın alternatif bir yolu, seçiciler kullanmaktır. Bu araçlar, daha okunaklı hale getirebilirsiniz.

composeTestRule.onNode(hasTestTag("Players"))
    .onChildren()
    .filter(hasClickAction())
    .assertCountEquals(4)
    .onFirst()
    .assert(hasText("John"))

Tam listeye Test Etme ile ilgili yardımcı kısa bilgiler bölümünden göz atabilirsiniz.

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.