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

আপনি সু-প্রতিষ্ঠিত পদ্ধতি এবং নিদর্শনগুলির সাথে আপনার রচনা অ্যাপটি পরীক্ষা করতে পারেন৷

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

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()
    }
}

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

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")
    }
}

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