UI উপাদানগুলির সাথে ইন্টারঅ্যাক্ট করার তিনটি প্রধান উপায় রয়েছে:
- ফাইন্ডার আপনাকে এক বা একাধিক উপাদান (অথবা শব্দার্থবিদ্যা গাছের নোড ) নির্বাচন করতে দেয় যাতে আপনি দাবি করতে পারেন বা তাদের উপর ক্রিয়া সম্পাদন করতে পারেন।
- উপাদানগুলির অস্তিত্ব আছে বা নির্দিষ্ট বৈশিষ্ট্য আছে কিনা তা যাচাই করার জন্য দাবি ব্যবহার করা হয়।
- অ্যাকশনগুলি ক্লিক বা অন্যান্য অঙ্গভঙ্গির মতো উপাদানগুলিতে সিমুলেটেড ব্যবহারকারী ইভেন্টগুলি ইনজেক্ট করে।
এই API গুলির মধ্যে কিছু শব্দার্থবিদ্যা গাছের এক বা একাধিক নোড উল্লেখ করার জন্য একটি SemanticsMatcher গ্রহণ করে।
সন্ধানকারী
আপনি যথাক্রমে এক বা একাধিক নোড নির্বাচন করতে onNode এবং onAllNodes ব্যবহার করতে পারেন, তবে আপনি সবচেয়ে সাধারণ অনুসন্ধানের জন্য সুবিধাজনক অনুসন্ধানকারীও ব্যবহার করতে পারেন, যেমন onNodeWithText , এবং onNodeWithContentDescription । আপনি Compose Testing cheat sheet এ সম্পূর্ণ তালিকাটি ব্রাউজ করতে পারেন।
একটি একক নোড নির্বাচন করুন
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'
যদি আপনার unmerged tree এর নোড মেলানোর প্রয়োজন হয়, তাহলে আপনি 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 cheat sheet- এ সম্পূর্ণ তালিকাটি ব্রাউজ করতে পারেন।
নোডের সংগ্রহে দাবি পরীক্ষা করার জন্যও কিছু ফাংশন রয়েছে:
// 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-এর জন্য তৈরি হলেও, এসপ্রেসো জ্ঞান কম্পোজ পরীক্ষার কিছু দিকের জন্য সহায়ক হতে পারে।