টেস্টিং API

UI উপাদানগুলির সাথে মিথস্ক্রিয়া করার তিনটি প্রধান উপায় রয়েছে:

  • ফাইন্ডার আপনাকে অ্যাসারশন করার জন্য বা কোনো অ্যাকশন সম্পাদন করার জন্য এক বা একাধিক এলিমেন্ট (অথবা সিম্যান্টিকস ট্রি-এর নোড ) নির্বাচন করতে দেয়।
  • কোনো উপাদানের অস্তিত্ব আছে কিনা বা সেটির নির্দিষ্ট বৈশিষ্ট্য আছে কিনা, তা যাচাই করতে অ্যাসারশন ব্যবহার করা হয়।
  • অ্যাকশনগুলো এলিমেন্টগুলোতে ক্লিক বা অন্যান্য অঙ্গভঙ্গির মতো অনুকৃত ব্যবহারকারী ইভেন্ট যুক্ত করে।

এই API-গুলোর মধ্যে কয়েকটি সিম্যান্টিকস ট্রি-এর এক বা একাধিক নোডকে নির্দেশ করার জন্য একটি SemanticsMatcher গ্রহণ করে।

ফাইন্ডার্স

আপনি যথাক্রমে একটি বা একাধিক নোড নির্বাচন করতে onNode এবং onAllNodes ব্যবহার করতে পারেন, তবে সবচেয়ে সাধারণ অনুসন্ধানের জন্য আপনি সুবিধাজনক ফাইন্ডারও ব্যবহার করতে পারেন, যেমন onNodeWithText এবং onNodeWithContentDescription । আপনি Compose Testing চিট শীটে সম্পূর্ণ তালিকাটি দেখতে পারেন।

একটি নোড নির্বাচন করুন

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

একাধিক নোড নির্বাচন করুন

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

অসংযুক্ত গাছ

কিছু নোড তাদের চাইল্ড নোডগুলোর অর্থগত তথ্য একত্রিত করে। উদাহরণস্বরূপ, দুটি টেক্সট এলিমেন্টসহ একটি বাটন টেক্সট এলিমেন্টগুলোর লেবেলগুলোকে একত্রিত করে:

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

একটি টেস্ট থেকে, সিম্যান্টিকস ট্রি দেখানোর জন্য printToLog() ব্যবহার করুন:

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

এই কোডটি নিম্নলিখিত আউটপুট প্রিন্ট করে:

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

যদি আপনাকে অসংযুক্ত ট্রি-এর কোনো নোড মেলাতে হয়, তাহলে আপনি useUnmergedTree true সেট করতে পারেন:

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

এই কোডটি নিম্নলিখিত আউটপুট প্রিন্ট করে:

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 প্যারামিটারটি সমস্ত ফাইন্ডারে উপলব্ধ। উদাহরণস্বরূপ, এখানে এটি একটি onNodeWithText ফাইন্ডারে ব্যবহৃত হয়েছে।

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

দাবি

এক বা একাধিক ম্যাচিং সহ একটি ফাইন্ডার দ্বারা ফেরত আসা SemanticsNodeInteraction উপর assert() কল করে অ্যাসারশনগুলি যাচাই করুন:

// 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"))

আপনি সবচেয়ে সাধারণ অ্যাসারশনগুলোর জন্য সুবিধাজনক ফাংশনও ব্যবহার করতে পারেন, যেমন assertExists , assertIsDisplayed , এবং assertTextEquals । আপনি Compose Testing চিট শীটে সম্পূর্ণ তালিকাটি দেখতে পারেন।

নোডের একটি সংগ্রহের উপর অ্যাসারশন পরীক্ষা করার জন্য ফাংশনও রয়েছে:

// 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())

কর্ম

একটি নোডে কোনো অ্যাকশন ইনজেক্ট করতে, perform…() ফাংশনটি কল করুন:

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

এখানে কিছু কাজের উদাহরণ দেওয়া হলো:

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

আপনি কম্পোজ টেস্টিং চিট শিট- এ সম্পূর্ণ তালিকাটি দেখতে পারেন।

ম্যাচার্স

আপনার কম্পোজ কোড পরীক্ষা করার জন্য বিভিন্ন ধরনের ম্যাচিং টুল উপলব্ধ আছে।

শ্রেণিবদ্ধ মিলকারী

হায়ারারকিক্যাল ম্যাচিং টুল আপনাকে সিম্যান্টিকস ট্রি-এর উপরে বা নীচে গিয়ে ম্যাচিং করার সুযোগ দেয়।

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

এই ম্যাচিং টুলগুলো ব্যবহারের কিছু উদাহরণ নিচে দেওয়া হলো:

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

নির্বাচক

টেস্ট তৈরি করার একটি বিকল্প উপায় হলো সিলেক্টর ব্যবহার করা, যা কিছু টেস্টকে আরও সহজে পাঠযোগ্য করে তুলতে পারে।

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

আপনি কম্পোজ টেস্টিং চিট শিট- এ সম্পূর্ণ তালিকাটি দেখতে পারেন।

অতিরিক্ত সম্পদ

  • অ্যান্ড্রয়েডে অ্যাপ পরীক্ষা করুন : অ্যান্ড্রয়েড টেস্টিং-এর প্রধান ল্যান্ডিং পেজটি টেস্টিং-এর মৌলিক বিষয় এবং কৌশল সম্পর্কে একটি বিস্তৃত ধারণা প্রদান করে।
  • টেস্টিংয়ের মূল বিষয়সমূহ : একটি অ্যান্ড্রয়েড অ্যাপ টেস্টিং করার পেছনের মূল ধারণাগুলো সম্পর্কে আরও জানুন।
  • স্থানীয় পরীক্ষা : আপনি কিছু পরীক্ষা স্থানীয়ভাবে, আপনার নিজের ওয়ার্কস্টেশনে চালাতে পারেন।
  • ইনস্ট্রুমেন্টেড টেস্ট : ইনস্ট্রুমেন্টেড টেস্ট চালানোও একটি ভালো অভ্যাস। অর্থাৎ, যে টেস্টগুলো সরাসরি ডিভাইসে চলে।
  • কন্টিনিউয়াস ইন্টিগ্রেশন : কন্টিনিউয়াস ইন্টিগ্রেশন আপনাকে আপনার টেস্টগুলোকে ডেপ্লয়মেন্ট পাইপলাইনে একীভূত করতে দেয়।
  • বিভিন্ন স্ক্রিন সাইজ পরীক্ষা করুন : ব্যবহারকারীদের জন্য যেহেতু অনেক ডিভাইস উপলব্ধ আছে, তাই আপনার বিভিন্ন স্ক্রিন সাইজ পরীক্ষা করে দেখা উচিত।
  • এসপ্রেসো : যদিও এটি ভিউ-ভিত্তিক UI-এর জন্য তৈরি, কম্পোজ টেস্টিং-এর কিছু ক্ষেত্রে এসপ্রেসো সম্পর্কিত জ্ঞান সহায়ক হতে পারে।