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-এর রেফারেন্স ডকুমেন্টেশন দেখুন।