আপনার টুকরা পরীক্ষা

প্রতিটি খণ্ডের আচরণের মূল্যায়ন করে এমন পরীক্ষায় ফ্রেমওয়ার্ক-প্রদত্ত API গুলিকে কীভাবে অন্তর্ভুক্ত করতে হয় তা এই বিষয়টি বর্ণনা করে।

টুকরাগুলি আপনার অ্যাপের মধ্যে পুনঃব্যবহারযোগ্য কন্টেইনার হিসাবে পরিবেশন করে, আপনাকে বিভিন্ন ক্রিয়াকলাপ এবং লেআউট কনফিগারেশনে একই ব্যবহারকারী ইন্টারফেস লেআউট উপস্থাপন করার অনুমতি দেয়। টুকরোগুলির বহুমুখীতার প্রেক্ষিতে, তারা একটি সামঞ্জস্যপূর্ণ এবং সম্পদ-দক্ষ অভিজ্ঞতা প্রদান করে তা যাচাই করা গুরুত্বপূর্ণ। নিম্নলিখিত নোট করুন:

  • আপনার খণ্ডটি একটি নির্দিষ্ট অভিভাবক কার্যকলাপ বা খণ্ডের উপর নির্ভরশীল হওয়া উচিত নয়।
  • খণ্ডটি ব্যবহারকারীর কাছে দৃশ্যমান না হওয়া পর্যন্ত আপনার একটি খণ্ডের দৃশ্য শ্রেণিবিন্যাস তৈরি করা উচিত নয়।

এই পরীক্ষাগুলি সম্পাদনের জন্য শর্তগুলি সেট আপ করতে সাহায্য করার জন্য, AndroidX fragment-testing লাইব্রেরি FragmentScenario ক্লাস প্রদান করে টুকরা তৈরি করতে এবং তাদের Lifecycle.State পরিবর্তন করতে।

নির্ভরতা ঘোষণা করা

FragmentScenario ব্যবহার করতে debugImplementation ব্যবহার করে আপনার অ্যাপের build.gradle ফাইলে fragment-testing-manifest আর্টিফ্যাক্ট এবং androidTestImplementation ব্যবহার করে fragment-testing আর্টিফ্যাক্ট সংজ্ঞায়িত করুন যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

গ্রোভি

dependencies {
    def fragment_version = "1.8.2"

    debugImplementation "androidx.fragment:fragment-testing-manifest:$fragment_version"

    androidTestImplementation "androidx.fragment:fragment-testing:$fragment_version"
}

কোটলিন

dependencies {
    val fragment_version = "1.8.2"

    debugImplementation("androidx.fragment:fragment-testing-manifest:$fragment_version")

    androidTestImplementation("androidx.fragment:fragment-testing:$fragment_version")
}

এই পৃষ্ঠায় পরীক্ষার উদাহরণগুলি এসপ্রেসো এবং ট্রুথ লাইব্রেরিগুলির দাবিগুলি ব্যবহার করে৷ অন্যান্য উপলব্ধ পরীক্ষা এবং দাবী লাইব্রেরি সম্পর্কে তথ্যের জন্য, AndroidX পরীক্ষার জন্য সেট আপ প্রকল্প দেখুন।

একটি খণ্ড তৈরি করুন

FragmentScenario পরীক্ষায় টুকরা চালু করার জন্য নিম্নলিখিত পদ্ধতিগুলি অন্তর্ভুক্ত করে:

  • launchInContainer() , একটি খণ্ডের ব্যবহারকারী ইন্টারফেস পরীক্ষা করার জন্য। FragmentScenario একটি কার্যকলাপের রুট ভিউ কন্ট্রোলারের সাথে খণ্ডটিকে সংযুক্ত করে। এই ধারণকারী কার্যকলাপ অন্যথায় খালি.
  • launch() , ফ্র্যাগমেন্টের ইউজার ইন্টারফেস ছাড়াই পরীক্ষার জন্য। FragmentScenario এই ধরনের খণ্ডটিকে একটি খালি কার্যকলাপের সাথে সংযুক্ত করে, যার কোনো রুট ভিউ নেই।

এই ফ্র্যাগমেন্টের ধরনগুলির মধ্যে একটি চালু করার পরে, FragmentScenario একটি নির্দিষ্ট অবস্থায় পরীক্ষার অধীনে খণ্ডটিকে চালিত করে। ডিফল্টরূপে এই অবস্থাটি RESUMED হয়, তবে আপনি initialState আর্গুমেন্ট দিয়ে এটিকে ওভাররাইড করতে পারেন। RESUMED অবস্থা নির্দেশ করে যে খণ্ডটি চলছে এবং ব্যবহারকারীর কাছে দৃশ্যমান। আপনি Espresso UI পরীক্ষা ব্যবহার করে এর UI উপাদান সম্পর্কে তথ্য মূল্যায়ন করতে পারেন।

নিম্নলিখিত কোড উদাহরণগুলি দেখায় কিভাবে প্রতিটি পদ্ধতি ব্যবহার করে আপনার খণ্ডটি চালু করতে হয়:

launchInContainer() উদাহরণ

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @Test fun testEventFragment() {
        // The "fragmentArgs" argument is optional.
        val fragmentArgs = bundleOf(“selectedListItem” to 0)
        val scenario = launchFragmentInContainer<EventFragment>(fragmentArgs)
        ...
    }
}

launch() উদাহরণ

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @Test fun testEventFragment() {
        // The "fragmentArgs" arguments are optional.
        val fragmentArgs = bundleOf("numElements" to 0)
        val scenario = launchFragment<EventFragment>(fragmentArgs)
        ...
    }
}

নির্ভরতা প্রদান করুন

যদি আপনার টুকরোগুলির নির্ভরতা থাকে, তাহলে আপনি launchInContainer() বা launch() পদ্ধতিতে একটি কাস্টম FragmentFactory প্রদান করে এই নির্ভরতাগুলির পরীক্ষামূলক সংস্করণ সরবরাহ করতে পারেন।

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @Test fun testEventFragment() {
        val someDependency = TestDependency()
        launchFragmentInContainer {
            EventFragment(someDependency)
        }
        ...
    }
}

FragmentFactory ব্যবহার করে ফ্র্যাগমেন্টে নির্ভরতা প্রদানের বিষয়ে আরও তথ্যের জন্য, দেখুন ফ্র্যাগমেন্ট ম্যানেজার

খণ্ডটিকে একটি নতুন রাজ্যে নিয়ে যান

আপনার অ্যাপ্লিকেশানের UI পরীক্ষাগুলিতে, এটি সাধারণত পরীক্ষার অধীনে খণ্ডটি চালু করা এবং এটিকে RESUMED অবস্থা থেকে পরীক্ষা করা শুরু করা যথেষ্ট। সূক্ষ্ম-দানাযুক্ত ইউনিট পরীক্ষায়, তবে, আপনি খণ্ডটির আচরণ মূল্যায়ন করতে পারেন কারণ এটি একটি জীবনচক্র অবস্থা থেকে অন্য জীবনচক্রে রূপান্তরিত হয়। আপনি launchFragment*() ফাংশনগুলির যেকোনো একটিতে initialState আর্গুমেন্ট পাস করে প্রাথমিক অবস্থা নির্দিষ্ট করতে পারেন।

খণ্ডটিকে একটি ভিন্ন লাইফসাইকেল অবস্থায় চালাতে, moveToState() কল করুন। এই পদ্ধতিটি আর্গুমেন্ট হিসাবে নিম্নলিখিত অবস্থাগুলিকে সমর্থন করে: CREATED , STARTED , RESUMED এবং DESTROYED । এই পদ্ধতিটি এমন একটি পরিস্থিতির অনুকরণ করে যেখানে আপনার খণ্ডটি থাকা অংশ বা কার্যকলাপ যেকোনো কারণে তার অবস্থা পরিবর্তন করে।

নিম্নলিখিত উদাহরণটি INITIALIZED অবস্থায় একটি পরীক্ষা খণ্ড চালু করে এবং তারপরে এটিকে RESUMED অবস্থায় নিয়ে যায়:

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @Test fun testEventFragment() {
        val scenario = launchFragmentInContainer<EventFragment>(
            initialState = Lifecycle.State.INITIALIZED
        )
        // EventFragment has gone through onAttach(), but not onCreate().
        // Verify the initial state.
        scenario.moveToState(Lifecycle.State.RESUMED)
        // EventFragment moves to CREATED -> STARTED -> RESUMED.
        ...
    }
}

খণ্ডটি পুনরায় তৈরি করুন

আপনার অ্যাপ্লিকেশান যদি এমন কোনো ডিভাইসে চলছে যার রিসোর্স কম, তাহলে সিস্টেমটি আপনার টুকরা থাকা কার্যকলাপকে ধ্বংস করতে পারে। এই পরিস্থিতিতে ব্যবহারকারী যখন এটিতে ফিরে আসে তখন আপনার অ্যাপটিকে খণ্ডটি পুনরায় তৈরি করতে হবে। এই পরিস্থিতি অনুকরণ করতে, কল recreate() :

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @Test fun testEventFragment() {
        val scenario = launchFragmentInContainer<EventFragment>()
        scenario.recreate()
        ...
    }
}

FragmentScenario.recreate() ফ্র্যাগমেন্ট এবং এর হোস্টকে ধ্বংস করে এবং তারপর তাদের পুনরায় তৈরি করে। যখন FragmentScenario ক্লাস পরীক্ষার অধীনে খণ্ডটিকে পুনরায় তৈরি করে, তখন খণ্ডটি জীবনচক্রের সেই অবস্থায় ফিরে আসে যা এটি ধ্বংস হওয়ার আগে ছিল।

UI খণ্ডের সাথে ইন্টারঅ্যাক্ট করা

পরীক্ষার অধীনে আপনার খণ্ডে UI অ্যাকশন ট্রিগার করতে, আপনার দৃশ্যের উপাদানগুলির সাথে ইন্টারঅ্যাক্ট করতে Espresso ভিউ ম্যাচার ব্যবহার করুন:

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @Test fun testEventFragment() {
        val scenario = launchFragmentInContainer<EventFragment>()
        onView(withId(R.id.refresh)).perform(click())
        // Assert some expected behavior
        ...
    }
}

আপনি যদি ফ্র্যাগমেন্টে নিজেই একটি পদ্ধতি কল করতে চান, যেমন বিকল্প মেনুতে একটি নির্বাচনের প্রতিক্রিয়া জানাতে, আপনি FragmentScenario.onFragment() ব্যবহার করে ফ্র্যাগমেন্টের একটি রেফারেন্স পেয়ে এবং একটি FragmentAction পাস করে নিরাপদে তা করতে পারেন:

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @Test fun testEventFragment() {
        val scenario = launchFragmentInContainer<EventFragment>()
        scenario.onFragment { fragment ->
            fragment.myInstanceMethod()
        }
    }
}

ডায়ালগ অ্যাকশন পরীক্ষা করুন

FragmentScenario এছাড়াও টেস্টিং ডায়ালগ টুকরা সমর্থন করে। যদিও ডায়ালগ টুকরোগুলিতে UI উপাদান রয়েছে, তবে তাদের বিন্যাসটি ক্রিয়াকলাপের পরিবর্তে একটি পৃথক উইন্ডোতে পপুলেট করা হয়। এই কারণে, ডায়ালগ টুকরা পরীক্ষা করতে FragmentScenario.launch() ব্যবহার করুন।

নিম্নলিখিত উদাহরণ ডায়ালগ বরখাস্ত প্রক্রিয়া পরীক্ষা করে:

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @Test fun testDismissDialogFragment() {
        // Assumes that "MyDialogFragment" extends the DialogFragment class.
        with(launchFragment<MyDialogFragment>()) {
            onFragment { fragment ->
                assertThat(fragment.dialog).isNotNull()
                assertThat(fragment.requireDialog().isShowing).isTrue()
                fragment.dismiss()
                fragment.parentFragmentManager.executePendingTransactions()
                assertThat(fragment.dialog).isNull()
            }
        }

        // Assumes that the dialog had a button
        // containing the text "Cancel".
        onView(withText("Cancel")).check(doesNotExist())
    }
}