আপনার অ্যাপের কার্যকলাপ পরীক্ষা করুন

ক্রিয়াকলাপগুলি আপনার অ্যাপের মধ্যে প্রতিটি ব্যবহারকারীর ইন্টারঅ্যাকশনের জন্য ধারক হিসাবে কাজ করে, তাই নিম্নলিখিতগুলির মতো ডিভাইস-স্তরের ইভেন্টগুলির সময় আপনার অ্যাপের কার্যকলাপগুলি কীভাবে আচরণ করে তা পরীক্ষা করা গুরুত্বপূর্ণ:

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

বিশেষ করে, অ্যাক্টিভিটি লাইফসাইকেলে বর্ণিত ইভেন্টগুলির প্রতিক্রিয়া হিসাবে আপনার কার্যকলাপ সঠিকভাবে আচরণ করছে তা নিশ্চিত করা গুরুত্বপূর্ণ।

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

একটি কার্যকলাপের অবস্থা ড্রাইভ

আপনার অ্যাপের ক্রিয়াকলাপ পরীক্ষা করার একটি মূল দিক হল নির্দিষ্ট রাজ্যে আপনার অ্যাপের ক্রিয়াকলাপ স্থাপন করা। আপনার পরীক্ষার এই "প্রদত্ত" অংশটিকে সংজ্ঞায়িত করতে, AndroidX টেস্ট লাইব্রেরির অংশ ActivityScenario এর উদাহরণগুলি ব্যবহার করুন৷ এই ক্লাসটি ব্যবহার করে, আপনি ডিভাইস-স্তরের ইভেন্টগুলি অনুকরণ করে এমন রাজ্যগুলিতে আপনার কার্যকলাপ রাখতে পারেন।

ActivityScenario হল একটি ক্রস-প্ল্যাটফর্ম API যা আপনি স্থানীয় ইউনিট পরীক্ষা এবং অন-ডিভাইস ইন্টিগ্রেশন পরীক্ষায় একইভাবে ব্যবহার করতে পারেন। একটি বাস্তব বা ভার্চুয়াল ডিভাইসে, ActivityScenario থ্রেড নিরাপত্তা প্রদান করে, আপনার পরীক্ষার ইন্সট্রুমেন্টেশন থ্রেড এবং থ্রেডের মধ্যে ইভেন্টগুলিকে সিঙ্ক্রোনাইজ করে যা পরীক্ষার অধীনে আপনার কার্যকলাপ চালায়।

এপিআই বিশেষত পরীক্ষার অধীনে একটি কার্যকলাপ যখন এটি ধ্বংস বা তৈরি হয় তখন কীভাবে আচরণ করে তা মূল্যায়নের জন্য উপযুক্ত। এই বিভাগটি এই API এর সাথে যুক্ত সবচেয়ে সাধারণ ব্যবহারের ক্ষেত্রে উপস্থাপন করে।

একটি কার্যকলাপ তৈরি করুন

পরীক্ষার অধীনে কার্যকলাপ তৈরি করতে, নিম্নলিখিত স্নিপেটে দেখানো কোড যোগ করুন:

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @Test fun testEvent() {
       launchActivity<MyActivity>().use {
       }
    }
}

অ্যাক্টিভিটি তৈরি করার পর, ActivityScenario অ্যাক্টিভিটিকে RESUMED অবস্থায় স্থানান্তরিত করে। এই অবস্থা নির্দেশ করে যে আপনার কার্যকলাপ চলছে এবং ব্যবহারকারীদের কাছে দৃশ্যমান। এই অবস্থায়, আপনি Espresso UI পরীক্ষা ব্যবহার করে আপনার কার্যকলাপের View উপাদানগুলির সাথে ইন্টারঅ্যাক্ট করতে পারবেন।

Google সুপারিশ করে যে আপনি পরীক্ষা শেষ হলে কার্যকলাপ close করুন। এটি সংশ্লিষ্ট সংস্থানগুলিকে পরিষ্কার করে এবং আপনার পরীক্ষার স্থায়িত্ব উন্নত করে। ActivityScenario Closeable প্রয়োগ করে, যাতে আপনি use এক্সটেনশন প্রয়োগ করতে পারেন, বা জাভা প্রোগ্রামিং ভাষায় try-with-resources , যাতে কার্যকলাপ স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যায়।

বিকল্পভাবে, আপনি ActivityScenarioRule ব্যবহার করতে পারেন প্রতিটি পরীক্ষার আগে ActivityScenario.launch স্বয়ংক্রিয়ভাবে কল করতে এবং পরীক্ষা টিয়ারডাউনে ActivityScenario.close । নিম্নলিখিত উদাহরণ দেখায় কিভাবে একটি নিয়ম সংজ্ঞায়িত করতে হয় এবং এটি থেকে একটি দৃশ্যের একটি উদাহরণ পেতে হয়:

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @get:Rule var activityScenarioRule = activityScenarioRule<MyActivity>()

    @Test fun testEvent() {
        val scenario = activityScenarioRule.scenario
    }
}

ক্রিয়াকলাপটিকে একটি নতুন রাজ্যে নিয়ে যান

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

moveToState() এর একটি উদাহরণ ব্যবহার নিম্নলিখিত কোড স্নিপেটে প্রদর্শিত হয়:

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @Test fun testEvent() {
        launchActivity<MyActivity>().use { scenario ->
            scenario.moveToState(State.CREATED)
        }
    }
}

বর্তমান কার্যকলাপের অবস্থা নির্ধারণ করুন

পরীক্ষার অধীনে একটি কার্যকলাপের বর্তমান অবস্থা নির্ধারণ করতে, আপনার ActivityScenario অবজেক্টের মধ্যে state ক্ষেত্রের মান পান। পরীক্ষার অধীনে একটি কার্যকলাপের অবস্থা পরীক্ষা করা বিশেষভাবে সহায়ক যদি কার্যকলাপটি অন্য কার্যকলাপে পুনঃনির্দেশিত হয় বা নিজেই শেষ হয়ে যায়, যেমনটি নিম্নলিখিত কোড স্নিপেটে প্রদর্শিত হয়েছে:

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @Test fun testEvent() {
        launchActivity<MyActivity>().use { scenario ->
            scenario.onActivity { activity ->
              startActivity(Intent(activity, MyOtherActivity::class.java))
            }

            val originalActivityState = scenario.state
        }
    }
}

কার্যকলাপ পুনরায় তৈরি করুন

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

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @Test fun testEvent() {
        launchActivity<MyActivity>().use { scenario ->
            scenario.recreate()
        }
    }
}

ActivityScenario ক্লাস অ্যাক্টিভিটির সংরক্ষিত ইনস্ট্যান্স অবস্থা এবং @NonConfigurationInstance ব্যবহার করে টীকা করা যেকোন বস্তু বজায় রাখে। এই বস্তুগুলি পরীক্ষার অধীনে আপনার কার্যকলাপের নতুন উদাহরণে লোড হয়।

কার্যকলাপ ফলাফল পুনরুদ্ধার

একটি সমাপ্ত কার্যকলাপের সাথে সম্পর্কিত ফলাফল কোড বা ডেটা পেতে, নিম্নলিখিত কোড স্নিপেটে দেখানো হিসাবে আপনার ActivityScenario অবজেক্টের মধ্যে result ক্ষেত্রের মান পান:

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @Test fun testResult() {
        launchActivity<MyActivity>().use {
            onView(withId(R.id.finish_button)).perform(click())

            // Activity under test is now finished.

            val resultCode = scenario.result.resultCode
            val resultData = scenario.result.resultData
        }
    }
}

কার্যকলাপে কর্ম ট্রিগার

ActivityScenario মধ্যে থাকা সমস্ত পদ্ধতি কল ব্লক করছে, তাই API-এর জন্য আপনাকে সেগুলিকে ইন্সট্রুমেন্টেশন থ্রেডে চালাতে হবে।

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

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @Test fun testEvent() {
        launchActivity<MyActivity>().use {
            onView(withId(R.id.refresh)).perform(click())
        }
    }
}

আপনি যদি কার্যকলাপের উপর একটি পদ্ধতি কল করতে চান, তবে, আপনি ActivityAction প্রয়োগ করে নিরাপদে তা করতে পারেন:

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @Test fun testEvent() {
        launchActivity<MyActivity>().use { scenario ->
            scenario.onActivity { activity ->
              activity.handleSwipeToRefresh()
            }
        }
    }
}