রোবোলেক্ট্রিক কৌশল

রোবোলেক্ট্রিক হল একটি ওপেন-সোর্স ফ্রেমওয়ার্ক যা Google দ্বারা রক্ষণাবেক্ষণ করা হয় যা আপনাকে একটি JVM-এর ভিতরে একটি সিমুলেটেড অ্যান্ড্রয়েড পরিবেশে পরীক্ষা চালাতে দেয়, কোনো এমুলেটরের ওভারহেড এবং ফ্ল্যাকিনেস ছাড়াই। এটি ললিপপ (API স্তর 21) থেকে অ্যান্ড্রয়েডের সমস্ত সংস্করণ সমর্থন করে।

অনেক বড় প্রকল্প তাদের পরীক্ষার গতি এবং নির্ভরযোগ্যতা বাড়াতে এবং বাস্তব ডিভাইস বা এমুলেটরগুলিতে পরীক্ষা চালানোর সাথে সম্পর্কিত খরচ কমাতে Robolectric ব্যবহার করে। এর মধ্যে বেশিরভাগ Google অ্যাপ রয়েছে যা রোবোলেক্ট্রিকের উপর অনেক বেশি নির্ভর করে।

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

পরীক্ষার কৌশল

রোবোলেক্ট্রিকের সাথে আপনি দুটি ধরণের পরীক্ষার কৌশল অনুসরণ করতে পারেন: ইউনিট পরীক্ষা এবং UI পরীক্ষা।

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

রোবোলেক্ট্রিককে অ্যান্ড্রয়েড অ্যাপে "ইউনিট টেস্টিং" সক্ষম করার একটি উপায় হিসাবে কল্পনা করা হয়েছিল। উদাহরণস্বরূপ, আপনি একটি ক্রিয়াকলাপ চালু করার অনুকরণ করতে পারেন এবং সমস্ত জীবনচক্র পদ্ধতিকে কল করে এর ভিতরের যুক্তি পরীক্ষা করতে পারেন।

আপনি ইউনিট পরীক্ষার জন্য নির্ভরতা হিসাবে Robolectric এর নকল (ছায়া বলা হয়) ব্যবহার করতে পারেন। উদাহরণস্বরূপ, যদি আপনার ক্লাস একটি বান্ডিল ব্যবহার করে বা আপনাকে একটি ব্লুটুথ সংযোগ জাল করতে হবে।

সাধারণভাবে, আপনি যদি একটি পরীক্ষাযোগ্য আর্কিটেকচার প্রয়োগ করেন তবে ইউনিট পরীক্ষার জন্য আপনাকে রোবোলেক্ট্রিক ব্যবহার করার দরকার নেই কারণ আপনার কোডটি অ্যান্ড্রয়েড ফ্রেমওয়ার্কের উপর কোন নির্ভরতা ছাড়াই বিচ্ছিন্নভাবে পরীক্ষাযোগ্য হওয়া উচিত।

UI পরীক্ষা

রোবোলেক্ট্রিক UI পরীক্ষা যেমন এসপ্রেসো বা রচনা পরীক্ষা চালাতে পারে। আপনি একটি ইন্সট্রুমেন্টেড টেস্টকে রোবোলেকট্রিকে রূপান্তর করতে পারেন এটিকে test সোর্স সেটে নিয়ে গিয়ে এবং রোবোলেক্ট্রিক নির্ভরতা সেট আপ করে।

android {
  testOptions {
    unitTests {
      isIncludeAndroidResources = true
    }
  }
}

dependencies {
  testImplementation("junit:junit:4.13.2")
  testImplementation("org.robolectric:robolectric:4.13")
}

test উৎস সেটে উপস্থিত যেকোনো UI পরীক্ষা রোবোলেক্ট্রিকের সাথে চলে।

import androidx.test.espresso.Espresso.onView

@RunWith(AndroidJUnit4::class)
class AddContactActivityTest {
    @Test
    fun inputTextShouldBeRetainedAfterActivityRecreation() {
        // GIVEN
        val contactName = "Test User"
        val scenario = ActivityScenario.launchActivity<AddContactActivity>()

        // WHEN
        // Enter contact name
        onView(withId(R.id.contact_name_text))
            .perform(typeText(contactName))
        // Destroy and recreate Activity
        scenario.recreate()

        // THEN
        // Check contact name was preserved.
        onView(withId(R.id.contact_name_text))
            .check(matches(withText(contactName)))
     }
}

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

আপনি Roboelectric এর সাথে অন্যান্য UI পরীক্ষা চালাতে পারেন, যেমন স্ক্রিনশট পরীক্ষা। তবে বিশ্বস্ততা কম কারণ বিভিন্ন ডিভাইস স্ক্রিনকে কিছুটা ভিন্নভাবে রেন্ডার করে।

আপনাকে অবশ্যই সিদ্ধান্ত নিতে হবে যে প্রতিটি ব্যবহারের ক্ষেত্রে রোবোলেক্ট্রিকের বাস্তবায়ন যথেষ্ট ভাল, তবে এখানে কিছু সুপারিশ রয়েছে:

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

দ্রষ্টব্য : রোবোলেক্ট্রিক নেটিভভাবে স্ক্রিনশট নিতে পারে, তবে এটির সাথে স্ক্রিনশট পরীক্ষা করার জন্য আপনার একটি তৃতীয় পক্ষের লাইব্রেরি প্রয়োজন।

রোবোলেক্ট্রিক বনাম ডিভাইস পরীক্ষা

সংক্ষেপে, রোবোলেক্ট্রিক বেশিরভাগ UI পরীক্ষা চালানোর জন্য যথেষ্ট বিশ্বস্ততা প্রদান করে তবে কিছু ক্ষেত্রে এখনও ডিভাইস পরীক্ষার প্রয়োজন হবে, যেমন সিস্টেম UI এর সাথে সম্পর্কিত যেমন এজ-টু-এজ বা পিকচার-ইন-পিকচার, অথবা যখন WebView এর মতো অসমর্থিত বৈশিষ্ট্যগুলির উপর নির্ভর করে .

,

রোবোলেক্ট্রিক হল একটি ওপেন-সোর্স ফ্রেমওয়ার্ক যা Google দ্বারা রক্ষণাবেক্ষণ করা হয় যা আপনাকে একটি JVM-এর ভিতরে একটি সিমুলেটেড অ্যান্ড্রয়েড পরিবেশে পরীক্ষা চালাতে দেয়, কোনো এমুলেটরের ওভারহেড এবং ফ্ল্যাকিনেস ছাড়াই। এটি ললিপপ (API স্তর 21) থেকে অ্যান্ড্রয়েডের সমস্ত সংস্করণ সমর্থন করে।

অনেক বড় প্রকল্প তাদের পরীক্ষার গতি এবং নির্ভরযোগ্যতা বাড়াতে এবং বাস্তব ডিভাইস বা এমুলেটরগুলিতে পরীক্ষা চালানোর সাথে সম্পর্কিত খরচ কমাতে Robolectric ব্যবহার করে। এর মধ্যে বেশিরভাগ Google অ্যাপ রয়েছে যা রোবোলেক্ট্রিকের উপর অনেক বেশি নির্ভর করে।

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

পরীক্ষার কৌশল

রোবোলেক্ট্রিকের সাথে আপনি দুটি ধরণের পরীক্ষার কৌশল অনুসরণ করতে পারেন: ইউনিট পরীক্ষা এবং UI পরীক্ষা।

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

রোবোলেক্ট্রিককে অ্যান্ড্রয়েড অ্যাপে "ইউনিট টেস্টিং" সক্ষম করার একটি উপায় হিসাবে কল্পনা করা হয়েছিল। উদাহরণস্বরূপ, আপনি একটি ক্রিয়াকলাপ চালু করার অনুকরণ করতে পারেন এবং সমস্ত জীবনচক্র পদ্ধতিকে কল করে এর ভিতরের যুক্তি পরীক্ষা করতে পারেন।

আপনি ইউনিট পরীক্ষার জন্য নির্ভরতা হিসাবে Robolectric এর নকল (ছায়া বলা হয়) ব্যবহার করতে পারেন। উদাহরণস্বরূপ, যদি আপনার ক্লাস একটি বান্ডিল ব্যবহার করে বা আপনাকে একটি ব্লুটুথ সংযোগ জাল করতে হবে।

সাধারণভাবে, আপনি যদি একটি পরীক্ষাযোগ্য আর্কিটেকচার প্রয়োগ করেন তবে ইউনিট পরীক্ষার জন্য আপনাকে রোবোলেক্ট্রিক ব্যবহার করার দরকার নেই কারণ আপনার কোডটি অ্যান্ড্রয়েড ফ্রেমওয়ার্কের উপর কোন নির্ভরতা ছাড়াই বিচ্ছিন্নভাবে পরীক্ষাযোগ্য হওয়া উচিত।

UI পরীক্ষা

রোবোলেক্ট্রিক UI পরীক্ষা যেমন এসপ্রেসো বা রচনা পরীক্ষা চালাতে পারে। আপনি একটি ইন্সট্রুমেন্টেড টেস্টকে রোবোলেকট্রিকে রূপান্তর করতে পারেন এটিকে test সোর্স সেটে নিয়ে গিয়ে এবং রোবোলেক্ট্রিক নির্ভরতা সেট আপ করে।

android {
  testOptions {
    unitTests {
      isIncludeAndroidResources = true
    }
  }
}

dependencies {
  testImplementation("junit:junit:4.13.2")
  testImplementation("org.robolectric:robolectric:4.13")
}

test উৎস সেটে উপস্থিত যেকোনো UI পরীক্ষা রোবোলেক্ট্রিকের সাথে চলে।

import androidx.test.espresso.Espresso.onView

@RunWith(AndroidJUnit4::class)
class AddContactActivityTest {
    @Test
    fun inputTextShouldBeRetainedAfterActivityRecreation() {
        // GIVEN
        val contactName = "Test User"
        val scenario = ActivityScenario.launchActivity<AddContactActivity>()

        // WHEN
        // Enter contact name
        onView(withId(R.id.contact_name_text))
            .perform(typeText(contactName))
        // Destroy and recreate Activity
        scenario.recreate()

        // THEN
        // Check contact name was preserved.
        onView(withId(R.id.contact_name_text))
            .check(matches(withText(contactName)))
     }
}

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

আপনি Roboelectric এর সাথে অন্যান্য UI পরীক্ষা চালাতে পারেন, যেমন স্ক্রিনশট পরীক্ষা। তবে বিশ্বস্ততা কম কারণ বিভিন্ন ডিভাইস স্ক্রিনকে কিছুটা ভিন্নভাবে রেন্ডার করে।

আপনাকে অবশ্যই সিদ্ধান্ত নিতে হবে যে প্রতিটি ব্যবহারের ক্ষেত্রে রোবোলেক্ট্রিকের বাস্তবায়ন যথেষ্ট ভাল, তবে এখানে কিছু সুপারিশ রয়েছে:

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

দ্রষ্টব্য : রোবোলেক্ট্রিক নেটিভভাবে স্ক্রিনশট নিতে পারে, তবে এটির সাথে স্ক্রিনশট পরীক্ষা করার জন্য আপনার একটি তৃতীয় পক্ষের লাইব্রেরি প্রয়োজন।

রোবোলেক্ট্রিক বনাম ডিভাইস পরীক্ষা

সংক্ষেপে, রোবোলেক্ট্রিক বেশিরভাগ UI পরীক্ষা চালানোর জন্য যথেষ্ট বিশ্বস্ততা প্রদান করে তবে কিছু ক্ষেত্রে এখনও ডিভাইস পরীক্ষার প্রয়োজন হবে, যেমন সিস্টেম UI এর সাথে সম্পর্কিত যেমন এজ-টু-এজ বা পিকচার-ইন-পিকচার, অথবা যখন WebView এর মতো অসমর্থিত বৈশিষ্ট্যগুলির উপর নির্ভর করে .

,

রোবোলেক্ট্রিক হল একটি ওপেন-সোর্স ফ্রেমওয়ার্ক যা Google দ্বারা রক্ষণাবেক্ষণ করা হয় যা আপনাকে একটি JVM-এর ভিতরে একটি সিমুলেটেড অ্যান্ড্রয়েড পরিবেশে পরীক্ষা চালাতে দেয়, কোনো এমুলেটরের ওভারহেড এবং ফ্ল্যাকিনেস ছাড়াই। এটি ললিপপ (API স্তর 21) থেকে অ্যান্ড্রয়েডের সমস্ত সংস্করণ সমর্থন করে।

অনেক বড় প্রকল্প তাদের পরীক্ষার গতি এবং নির্ভরযোগ্যতা বাড়াতে এবং বাস্তব ডিভাইস বা এমুলেটরগুলিতে পরীক্ষা চালানোর সাথে সম্পর্কিত খরচ কমাতে Robolectric ব্যবহার করে। এর মধ্যে বেশিরভাগ Google অ্যাপ রয়েছে যা রোবোলেক্ট্রিকের উপর অনেক বেশি নির্ভর করে।

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

পরীক্ষার কৌশল

রোবোলেক্ট্রিকের সাথে আপনি দুটি ধরণের পরীক্ষার কৌশল অনুসরণ করতে পারেন: ইউনিট পরীক্ষা এবং UI পরীক্ষা।

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

রোবোলেক্ট্রিককে অ্যান্ড্রয়েড অ্যাপে "ইউনিট টেস্টিং" সক্ষম করার একটি উপায় হিসাবে কল্পনা করা হয়েছিল। উদাহরণস্বরূপ, আপনি একটি ক্রিয়াকলাপ চালু করার অনুকরণ করতে পারেন এবং সমস্ত জীবনচক্র পদ্ধতিকে কল করে এর ভিতরের যুক্তি পরীক্ষা করতে পারেন।

আপনি ইউনিট পরীক্ষার জন্য নির্ভরতা হিসাবে Robolectric এর নকল (ছায়া বলা হয়) ব্যবহার করতে পারেন। উদাহরণস্বরূপ, যদি আপনার ক্লাস একটি বান্ডিল ব্যবহার করে বা আপনাকে একটি ব্লুটুথ সংযোগ জাল করতে হবে।

সাধারণভাবে, আপনি যদি একটি পরীক্ষাযোগ্য আর্কিটেকচার প্রয়োগ করেন তবে ইউনিট পরীক্ষার জন্য আপনাকে রোবোলেক্ট্রিক ব্যবহার করার দরকার নেই কারণ আপনার কোডটি অ্যান্ড্রয়েড ফ্রেমওয়ার্কের উপর কোন নির্ভরতা ছাড়াই বিচ্ছিন্নভাবে পরীক্ষাযোগ্য হওয়া উচিত।

UI পরীক্ষা

রোবোলেক্ট্রিক UI পরীক্ষা যেমন এসপ্রেসো বা রচনা পরীক্ষা চালাতে পারে। আপনি একটি ইন্সট্রুমেন্টেড টেস্টকে রোবোলেকট্রিকে রূপান্তর করতে পারেন এটিকে test সোর্স সেটে নিয়ে গিয়ে এবং রোবোলেক্ট্রিক নির্ভরতা সেট আপ করে।

android {
  testOptions {
    unitTests {
      isIncludeAndroidResources = true
    }
  }
}

dependencies {
  testImplementation("junit:junit:4.13.2")
  testImplementation("org.robolectric:robolectric:4.13")
}

test উৎস সেটে উপস্থিত যেকোনো UI পরীক্ষা রোবোলেক্ট্রিকের সাথে চলে।

import androidx.test.espresso.Espresso.onView

@RunWith(AndroidJUnit4::class)
class AddContactActivityTest {
    @Test
    fun inputTextShouldBeRetainedAfterActivityRecreation() {
        // GIVEN
        val contactName = "Test User"
        val scenario = ActivityScenario.launchActivity<AddContactActivity>()

        // WHEN
        // Enter contact name
        onView(withId(R.id.contact_name_text))
            .perform(typeText(contactName))
        // Destroy and recreate Activity
        scenario.recreate()

        // THEN
        // Check contact name was preserved.
        onView(withId(R.id.contact_name_text))
            .check(matches(withText(contactName)))
     }
}

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

আপনি Roboelectric এর সাথে অন্যান্য UI পরীক্ষা চালাতে পারেন, যেমন স্ক্রিনশট পরীক্ষা। তবে বিশ্বস্ততা কম কারণ বিভিন্ন ডিভাইস স্ক্রিনকে কিছুটা ভিন্নভাবে রেন্ডার করে।

আপনাকে অবশ্যই সিদ্ধান্ত নিতে হবে যে প্রতিটি ব্যবহারের ক্ষেত্রে রোবোলেক্ট্রিকের বাস্তবায়ন যথেষ্ট ভাল, তবে এখানে কিছু সুপারিশ রয়েছে:

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

দ্রষ্টব্য : রোবোলেক্ট্রিক নেটিভভাবে স্ক্রিনশট নিতে পারে, তবে এটির সাথে স্ক্রিনশট পরীক্ষা করার জন্য আপনার একটি তৃতীয় পক্ষের লাইব্রেরি প্রয়োজন।

রোবোলেক্ট্রিক বনাম ডিভাইস পরীক্ষা

সংক্ষেপে, রোবোলেক্ট্রিক বেশিরভাগ UI পরীক্ষা চালানোর জন্য যথেষ্ট বিশ্বস্ততা প্রদান করে তবে কিছু ক্ষেত্রে এখনও ডিভাইস পরীক্ষার প্রয়োজন হবে, যেমন সিস্টেম UI এর সাথে সম্পর্কিত যেমন এজ-টু-এজ বা পিকচার-ইন-পিকচার, অথবা যখন WebView এর মতো অসমর্থিত বৈশিষ্ট্যগুলির উপর নির্ভর করে .