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.
  • İddialar, öğelerin var olduğunu veya belirli özelliklere sahip olduğunu doğrulamak için kullanılır.
  • İş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.

Bulduğunuz

Sırasıyla bir veya birden fazla düğüm seçmek için onNode ve onAllNodes kullanabilirsiniz. Ancak en yaygın aramalar için onNodeWithText ve onNodeWithContentDescription gibi kolay arama araçlarını da kullanabilirsiniz. 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ştirilmemiş 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()

İddialar

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.

Ayrıca, bir düğüm koleksiyonundaki iddiaları kontrol etmek için 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()

İşlemlere örnek olarak şunları verebiliriz:

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

Oluşturma Testi ile ilgili ipuçlarını inceleyerek listenin tamamına göz atabilirsiniz.

Eşleştirenler

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

Bu eşleştiricilerin kullanımına ilişkin bazı örnekleri aşağıda bulabilirsiniz:

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

Seçiciler

Test oluşturmanın alternatif bir yolu, bazı testleri daha okunaklı hale getirebilecek seçiciler kullanmaktır.

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 test açılış sayfası, testin temelleri ve teknikleri hakkında daha geniş bir bakış açısı sunar.
  • Testin temelleri: Android uygulamasını test etmenin temel kavramları hakkında daha fazla bilgi edinin.
  • Yerel testler: Bazı testler yapabilirsiniz yerel olarak ve kendi iş istasyonunuzda.
  • Araçla testler: Araçla testler de çalıştırmak iyi bir uygulamadır. Yani doğrudan cihazda çalıştırı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: birçok cihaz kullanıyorsanız farklı ekranları test etmeniz gerekir. seçin.
  • Espresso: Görüntü tabanlı kullanıcı arayüzleri için tasarlanmış olsa da Espresso bilgisi, Oluşturma testi ile ilgili bazı yönler için yine de faydalı olabilir.