Glance-এর মাধ্যমে ইউনিট টেস্টিং

Glance ইউনিট টেস্ট API আপনাকে ভিউ ইনফলেশন বা UI অটোমেটরের প্রয়োজন ছাড়াই আপনার Glance কোড পরীক্ষা করতে দেয়। যেমন, ইউনিট টেস্ট API আপনাকে কন্ডিশন যাচাই করতে দেয়, যেমন, কোনও এলিমেন্ট তালিকায় আছে কিনা অথবা কোনও বক্স চেক করা হয়েছে কিনা। এটি hasContentDescriptionEqualTo অথবা isChecked-এর মতো ম্যাচ করার টুল ব্যবহার করে।

এই API খুব বেশি ভারী নয় এবং এটি সেট-আপ করতেও বেশি সময় লাগে না, তাই আপনি টেস্ট-ড্রাইভেন ডেভেলপমেন্ট করতে পারেন। এর পাশাপাশি, আপনি নিজের উইজেটের আলাদা আলাদা অংশ ডেভেলপ করতে এবং কোড রিইউজ করার সুবিধা উন্নত করতে সেগুলি সাজাতে পারেন।

সেট-আপ করুন

ইউনিট টেস্ট লাইব্রেরি ব্যবহার করার জন্য প্রয়োজনীয় ডিপেন্ডেন্সিগুলি নিচের উদাহরণে দেখানো হয়েছে:

// Other Glance and Compose runtime dependencies.
...
testImplementation 'androidx.glance:glance-testing:1.1.1'
testImplementation 'androidx.glance:glance-appwidget-testing:1.1.1'
...
// You may include additional dependencies, such as Robolectric, if your test
// needs to set a LocalContext.

টেস্ট স্ট্রাকচার

কোড আবার ব্যবহার করা ও ইউনিট টেস্টিং চালু করতে, GlanceAppWidget ক্লাসের বাইরে কম্পোজ করা যায় এমন ফাংশন সংগঠিত করুন। যতটা সম্ভব আপনার টেস্ট করা ইউনিটের জটিলতা কমান।

আপনি provideComposable-এর মাধ্যমে কোনও টেস্ট কম্পোজেবলকে টার্গেট করতে এবং onNode বা onAllNodes-এর মাধ্যমে এক বা একাধিক Glance নোডে আপনার ইউনিট টেস্ট চালাতে পারবেন।

private const val FAKE_HEADLINE = "EXTRA! EXTRA! READ ALL ABOUT IT!"

class MyGlanceComposableTest {
    @Test
    fun myNewsItemComposable_largeSize_hasHeadline() = runGlanceAppWidgetUnitTest {
        // Set the composable to test
        provideComposable {
            MyNewsItemComposable(FAKE_HEADLINE)
        }

        // Perform assertions
        onNode(hasTestTag("headline"))
            .assertHasText(FAKE_HEADLINE)
    }


    @Composable
    fun MyNewsItemComposable(headline: String) {
        Row {
            Text(
                text = headline,
                modifier = GlanceModifier.semantics { testTag = "headline" },
            )
        }
    }
}

টেস্টের জন্য প্রসঙ্গ ও সাইজ সেট করা

আপনার কম্পোজ করার উপযুক্ত ফাংশন LocalContext.current() মেথড ব্যবহার করে কনটেক্সট পড়লে, আপনাকে অবশ্যই setContext() ব্যবহার করে কনটেক্সট সেট করতে হবে। অন্যথায়, এই ধাপটি ঐচ্ছিক।

কন্টেক্সট প্রদান করতে, আপনি Robolectric-এর মতো যেকোনও JVM-ভিত্তিক Android ইউনিট টেস্টিং ফ্রেমওয়ার্ক ব্যবহার করতে পারেন।

আপনার কম্পোজেবল ফাংশন LocalSize অ্যাক্সেস করলে, টেস্টে কম্পোজেবল দেওয়ার আগে টেস্টের জন্য প্রত্যাশিত সাইজ সেট করুন। ডিফল্ট সাইজ হল ৩৪৯.dp x ৪৫৫.dp, যা পোর্ট্রেট মোডে Pixel 4 ডিভাইসে দেখানো ৫x৪ উইজেটের সমান ।

  • আপনার AppWidget sizeMode == Single ব্যবহার করলে, আপনার উইজেটের info.xml ফাইলে এটি minWidth ও minHeight হিসেবে সেট করতে পারবেন।
  • আপনার AppWidget sizeMode == Exact ব্যবহার করলে, আপনি যেভাবে আপনার উইজেটের সাইজ নির্ধারণ করেন, একই উপায়ে পরীক্ষা করার জন্য সাইজ শনাক্ত করতে পারবেন এবং আপনার উইজেট যেসব ল্যান্ডস্কেপ ও পোর্ট্রেট সাইজে দেখা যেতে পারে সেগুলি শনাক্ত করে সেগুলির জন্য পরীক্ষা করতে পারবেন।
  • আপনার AppWidget sizeMode == Responsive ব্যবহার করলে, আপনি sizeMode নির্দিষ্ট করার সময় আপনার দেওয়া তালিকা থেকে কোনও একটি সাইজ হিসেবে এটি সেট করতে পারবেন।

টেস্ট টাইমআউটের ডিফল্ট সময়সীমা হল ১ সেকেন্ড, কিন্তু আপনার টেস্ট ইনফ্রাস্ট্রাকচার অন্য টাইমআউট প্রয়োগ করলে, আপনি runGlanceAppWidgetUnitTest পদ্ধতিতে আর্গুমেন্ট হিসেবে কাস্টম সময়সীমা পাস করতে পারবেন।

আরও তথ্য ও কোড স্যাম্পেলের জন্য, runGlanceAppWidgetUnitTest-এর রেফারেন্স ডকুমেন্টেশন দেখুন।