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

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 দিয়ে একটি পরীক্ষা 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() পদ্ধতি ব্যবহার করে context পড়ে, তাহলে আপনাকে setContext() ব্যবহার করে একটি context সেট করতে হবে। অন্যথায়, এই ধাপটি ঐচ্ছিক।

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

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

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

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

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