সাধারণ নিদর্শন

আপনি সুপ্রতিষ্ঠিত পদ্ধতি এবং প্যাটার্ন দিয়ে আপনার কম্পোজ অ্যাপটি পরীক্ষা করতে পারেন।

বিচ্ছিন্নভাবে পরীক্ষা করুন

ComposeTestRule আপনাকে যেকোনো কম্পোজেবল প্রদর্শন করে একটি কার্যকলাপ শুরু করতে দেয়: আপনার সম্পূর্ণ অ্যাপ্লিকেশন, একটি একক স্ক্রিন, অথবা একটি ছোট উপাদান। আপনার কম্পোজেবলগুলি সঠিকভাবে এনক্যাপসুলেটেড কিনা এবং সেগুলি স্বাধীনভাবে কাজ করে কিনা তা পরীক্ষা করাও একটি ভাল অনুশীলন, যা সহজ এবং আরও মনোযোগী UI পরীক্ষার জন্য অনুমতি দেয়।

এর অর্থ এই নয় যে আপনার কেবল ইউনিট UI পরীক্ষা তৈরি করা উচিত। আপনার UI এর বৃহত্তর অংশগুলির স্কোপিং UI পরীক্ষাগুলিও খুব গুরুত্বপূর্ণ।

আপনার নিজস্ব কন্টেন্ট সেট করার পরে কার্যকলাপ এবং সংস্থানগুলি অ্যাক্সেস করুন

প্রায়শই আপনাকে composeTestRule.setContent ব্যবহার করে পরীক্ষার অধীনে কন্টেন্ট সেট করতে হয় এবং আপনাকে অ্যাক্টিভিটি রিসোর্স অ্যাক্সেস করতে হয়, উদাহরণস্বরূপ, একটি প্রদর্শিত টেক্সট একটি স্ট্রিং রিসোর্সের সাথে মেলে তা নিশ্চিত করার জন্য। তবে, createAndroidComposeRule() দিয়ে তৈরি একটি নিয়মে আপনি setContent কল করতে পারবেন না যদি অ্যাক্টিভিটি ইতিমধ্যেই এটিকে কল করে।

এটি অর্জনের একটি সাধারণ ধরণ হল ComponentActivity এর মতো একটি খালি কার্যকলাপ ব্যবহার করে একটি AndroidComposeTestRule তৈরি করা।

class MyComposeTest {

    @get:Rule
    val composeTestRule = createAndroidComposeRule<ComponentActivity>()

    @Test
    fun myTest() {
        // Start the app
        composeTestRule.setContent {
            MyAppTheme {
                MainScreen(uiState = exampleUiState, /*...*/)
            }
        }
        val continueLabel = composeTestRule.activity.getString(R.string.next)
        composeTestRule.onNodeWithText(continueLabel).performClick()
    }
}

মনে রাখবেন যে ComponentActivity আপনার অ্যাপের AndroidManifest.xml ফাইলে যোগ করতে হবে। আপনার মডিউলে এই নির্ভরতা যোগ করে এটি সক্ষম করুন:

debugImplementation("androidx.compose.ui:ui-test-manifest:$compose_version")

কাস্টম শব্দার্থবিদ্যার বৈশিষ্ট্য

আপনি পরীক্ষায় তথ্য প্রকাশ করার জন্য কাস্টম সেমান্টিক্স বৈশিষ্ট্য তৈরি করতে পারেন। এটি করার জন্য, একটি নতুন SemanticsPropertyKey সংজ্ঞায়িত করুন এবং SemanticsPropertyReceiver ব্যবহার করে এটি উপলব্ধ করুন।

// Creates a semantics property of type Long.
val PickedDateKey = SemanticsPropertyKey<Long>("PickedDate")
var SemanticsPropertyReceiver.pickedDate by PickedDateKey

এবার semantics সংশোধকটিতে সেই বৈশিষ্ট্যটি ব্যবহার করুন:

val datePickerValue by remember { mutableStateOf(0L) }
MyCustomDatePicker(
    modifier = Modifier.semantics { pickedDate = datePickerValue }
)

পরীক্ষাগুলি থেকে, সম্পত্তির মান নিশ্চিত করতে SemanticsMatcher.expectValue ব্যবহার করুন:

composeTestRule
    .onNode(SemanticsMatcher.expectValue(PickedDateKey, 1445378400)) // 2015-10-21
    .assertExists()

অবস্থা পুনরুদ্ধার যাচাই করুন

অ্যাক্টিভিটি বা প্রক্রিয়াটি পুনরায় তৈরি করার সময় আপনার কম্পোজ এলিমেন্টগুলির অবস্থা সঠিকভাবে পুনরুদ্ধার করা হয়েছে কিনা তা যাচাই করুন। StateRestorationTester ক্লাসের সাহায্যে অ্যাক্টিভিটি রিক্রিয়েশনের উপর নির্ভর না করে এই ধরনের পরীক্ষাগুলি সম্পাদন করুন।

এই ক্লাসটি আপনাকে একটি কম্পোজেবলের পুনর্গঠন সিমুলেট করতে দেয়। rememberSaveable এর বাস্তবায়ন যাচাই করার জন্য এটি বিশেষভাবে কার্যকর।


class MyStateRestorationTests {

    @get:Rule
    val composeTestRule = createComposeRule()

    @Test
    fun onRecreation_stateIsRestored() {
        val restorationTester = StateRestorationTester(composeTestRule)

        restorationTester.setContent { MainScreen() }

        // TODO: Run actions that modify the state

        // Trigger a recreation
        restorationTester.emulateSavedInstanceStateRestore()

        // TODO: Verify that state has been correctly restored.
    }
}

বিভিন্ন ডিভাইস কনফিগারেশন পরীক্ষা করুন

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

DeviceConfigurationOverride হল একটি পরীক্ষামূলক API যা আপনাকে পরীক্ষাধীন @Composable কন্টেন্টের জন্য স্থানীয়ভাবে বিভিন্ন ডিভাইস কনফিগারেশন সিমুলেট করতে দেয়।

DeviceConfigurationOverride এর কম্প্যানিয়ন অবজেক্টে নিম্নলিখিত এক্সটেনশন ফাংশন রয়েছে, যা ডিভাইস-স্তরের কনফিগারেশন বৈশিষ্ট্যগুলিকে ওভাররাইড করে:

একটি নির্দিষ্ট ওভাররাইড প্রয়োগ করতে, পরীক্ষার অধীনে থাকা কন্টেন্টটিকে DeviceConfigurationOverride() শীর্ষ-স্তরের ফাংশনে কল করে প্যারামিটার হিসেবে প্রয়োগ করার জন্য ওভাররাইডটি পাস করুন।

উদাহরণস্বরূপ, নিম্নলিখিত কোডটি DeviceConfigurationOverride.ForcedSize() ওভাররাইড প্রয়োগ করে স্থানীয়ভাবে ঘনত্ব পরিবর্তন করে, MyScreen কম্পোজেবলকে একটি বৃহৎ ল্যান্ডস্কেপ উইন্ডোতে রেন্ডার করতে বাধ্য করে, এমনকি যদি পরীক্ষাটি চলমান ডিভাইসটি সরাসরি সেই উইন্ডো আকার সমর্থন না করে:

composeTestRule.setContent {
    DeviceConfigurationOverride(
        DeviceConfigurationOverride.ForcedSize(DpSize(1280.dp, 800.dp))
    ) {
        MyScreen() // Will be rendered in the space for 1280dp by 800dp without clipping.
    }
}

একসাথে একাধিক ওভাররাইড প্রয়োগ করতে, DeviceConfigurationOverride.then() ব্যবহার করুন:

composeTestRule.setContent {
    DeviceConfigurationOverride(
        DeviceConfigurationOverride.FontScale(1.5f) then
            DeviceConfigurationOverride.FontWeightAdjustment(200)
    ) {
        Text(text = "text with increased scale and weight")
    }
}

অতিরিক্ত সম্পদ

  • অ্যান্ড্রয়েডে অ্যাপ পরীক্ষা করুন : মূল অ্যান্ড্রয়েড টেস্টিং ল্যান্ডিং পৃষ্ঠাটি পরীক্ষার মৌলিক বিষয় এবং কৌশলগুলির একটি বিস্তৃত দৃষ্টিভঙ্গি প্রদান করে।
  • পরীক্ষার মৌলিক বিষয় : একটি অ্যান্ড্রয়েড অ্যাপ পরীক্ষা করার পিছনে মূল ধারণাগুলি সম্পর্কে আরও জানুন।
  • স্থানীয় পরীক্ষা : আপনি আপনার নিজস্ব ওয়ার্কস্টেশনে স্থানীয়ভাবে কিছু পরীক্ষা চালাতে পারেন।
  • যন্ত্রচালিত পরীক্ষা : যন্ত্রচালিত পরীক্ষা চালানোও ভালো অভ্যাস। অর্থাৎ, এমন পরীক্ষা যা সরাসরি ডিভাইসে চলে।
  • ক্রমাগত ইন্টিগ্রেশন : ক্রমাগত ইন্টিগ্রেশন আপনাকে আপনার পরীক্ষাগুলিকে আপনার স্থাপনার পাইপলাইনে একীভূত করতে দেয়।
  • বিভিন্ন স্ক্রিন মাপ পরীক্ষা করুন : ব্যবহারকারীদের জন্য অনেক ডিভাইস উপলব্ধ থাকায়, আপনার বিভিন্ন স্ক্রিন মাপের জন্য পরীক্ষা করা উচিত।
  • এসপ্রেসো : ভিউ-ভিত্তিক UI-এর জন্য তৈরি হলেও, এসপ্রেসো জ্ঞান কম্পোজ পরীক্ষার কিছু দিকের জন্য সহায়ক হতে পারে।