এক নজরে ইউনিট পরীক্ষা

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

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

সেটআপ

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

// 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 ব্যবহার করে একটি টেস্ট Composable-কে টার্গেট করতে পারেন এবং যথাক্রমে 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() ব্যবহার করে একটি কনটেক্সট সেট করতে হবে। অন্যথায়, এই ধাপটি ঐচ্ছিক।

আপনি কনটেক্সট প্রদানের জন্য রোবোলেট্রিকের মতো যেকোনো JVM-ভিত্তিক অ্যান্ড্রয়েড ইউনিট টেস্টিং ফ্রেমওয়ার্ক ব্যবহার করতে পারেন।

আপনার কম্পোজেবল ফাংশন যদি LocalSize অ্যাক্সেস করে, তাহলে টেস্টে কম্পোজেবল দেওয়ার আগে টেস্টের জন্য উদ্দিষ্ট সাইজ সেট করে নিন। ডিফল্ট সাইজ হলো 349.dp x 455.dp, যা একটি পিক্সেল ৪ ডিভাইসে পোর্ট্রেট মোডে প্রদর্শিত 5x4 উইজেটের সমতুল্য।

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

একটি টেস্ট টাইমআউটের ডিফল্ট সময়কাল হলো ১ সেকেন্ড, কিন্তু আপনার টেস্ট পরিকাঠামো যদি ভিন্ন কোনো টাইমআউট প্রয়োগ করে, তবে আপনি runGlanceAppWidgetUnitTest মেথডে আর্গুমেন্ট হিসেবে একটি কাস্টম সময়কাল পাস করতে পারেন।

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