এসপ্রেসো ডিভাইস API দিয়ে স্ক্রিন কনফিগারেশন পরিবর্তনের বিরুদ্ধে পরীক্ষা করুন

ডিভাইসের সাধারণ কনফিগারেশন পরিবর্তন, যেমন ডিভাইস ঘোরানো এবং স্ক্রিন খোলার সময়, আপনার অ্যাপ পরীক্ষা করতে Espresso Device API ব্যবহার করুন। Espresso Device API আপনাকে একটি ভার্চুয়াল ডিভাইসে এই কনফিগারেশন পরিবর্তনগুলো সিমুলেট করতে দেয় এবং আপনার টেস্টগুলো সিনক্রোনাসভাবে সম্পাদন করে, ফলে একবারে কেবল একটি UI অ্যাকশন বা অ্যাসারশন ঘটে এবং আপনার পরীক্ষার ফলাফল আরও নির্ভরযোগ্য হয়। আপনি যদি Espresso দিয়ে UI টেস্ট লিখতে নতুন হন, তবে এর ডকুমেন্টেশন দেখুন।

এসপ্রেসো ডিভাইস এপিআই ব্যবহার করার জন্য আপনার নিম্নলিখিত জিনিসগুলির প্রয়োজন হবে:

  • অ্যান্ড্রয়েড স্টুডিও ইগুয়ানা বা উচ্চতর সংস্করণ
  • অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৮.৩ বা তার উচ্চতর সংস্করণ
  • অ্যান্ড্রয়েড এমুলেটর ৩৩.১.১০ বা উচ্চতর
  • অ্যান্ড্রয়েড ভার্চুয়াল ডিভাইস যা এপিআই লেভেল ২৪ বা তার উচ্চতর সংস্করণে চলে

এসপ্রেসো ডিভাইস এপিআই-এর জন্য আপনার প্রজেক্টটি সেট আপ করুন।

আপনার প্রজেক্টটি Espresso Device API সমর্থন করার জন্য সেট আপ করতে, নিম্নলিখিতগুলি করুন:

  1. টেস্ট ডিভাইসটিকে কমান্ড পাঠানোর অনুমতি দিতে, androidTest সোর্স সেটের ম্যানিফেস্ট ফাইলে INTERNET এবং ACCESS_NETWORK_STATE পারমিশনগুলো যোগ করুন:

      <uses-permission android:name="android.permission.INTERNET" />
      <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
      
  2. gradle.properties ফাইলে enableEmulatorControl পরীক্ষামূলক ফ্ল্যাগটি সক্রিয় করুন:

      android.experimental.androidTest.enableEmulatorControl=true
      
  3. মডিউল-স্তরের বিল্ড স্ক্রিপ্টে emulatorControl অপশনটি সক্রিয় করুন:

    কোটলিন

      testOptions {
        emulatorControl {
          enable = true
        }
      }
      

    গ্রুভি

      testOptions {
        emulatorControl {
          enable = true
        }
      }
      
  4. মডিউল-স্তরের বিল্ড স্ক্রিপ্টে, আপনার প্রজেক্টে Espresso Device লাইব্রেরিটি ইম্পোর্ট করুন:

    কোটলিন

      dependencies {
        androidTestImplementation("androidx.test.espresso:espresso-device:1.0.1")
      }
      

    গ্রুভি

      dependencies {
        androidTestImplementation 'androidx.test.espresso:espresso-device:1.0.1'
      }
      

সাধারণ কনফিগারেশন পরিবর্তনের বিরুদ্ধে পরীক্ষা করুন

এসপ্রেসো ডিভাইস এপিআই-তে একাধিক স্ক্রিন ওরিয়েন্টেশন এবং ফোল্ডেবল স্টেট রয়েছে, যা ব্যবহার করে আপনি ডিভাইস কনফিগারেশনের পরিবর্তনগুলো সিমুলেট করতে পারেন।

স্ক্রিন ঘূর্ণনের বিরুদ্ধে পরীক্ষা

ডিভাইসের স্ক্রিন ঘুরলে আপনার অ্যাপের কী পরিবর্তন হয়, তা পরীক্ষা করার একটি উদাহরণ এখানে দেওয়া হলো:

  1. প্রথমে, একটি সামঞ্জস্যপূর্ণ প্রারম্ভিক অবস্থার জন্য ডিভাইসটিকে পোর্ট্রেট মোডে সেট করুন:

      import androidx.test.espresso.device.action.ScreenOrientation
      import androidx.test.espresso.device.rules.ScreenOrientationRule
      ...
      @get:Rule
      val screenOrientationRule: ScreenOrientationRule = ScreenOrientationRule(ScreenOrientation.PORTRAIT)
      
  2. এমন একটি টেস্ট তৈরি করুন যা টেস্ট চলাকালীন ডিভাইসটিকে ল্যান্ডস্কেপ ওরিয়েন্টেশনে সেট করে:

      @Test
      fun myRotationTest() {
        ...
        // Sets the device to landscape orientation during test execution.
        onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE)
        ...
      }
      
  3. স্ক্রিনটি ঘোরার পরে, পরীক্ষা করে দেখুন যে UI প্রত্যাশা অনুযায়ী নতুন লেআউটের সাথে খাপ খাইয়ে নিচ্ছে কিনা।

      @Test
      fun myRotationTest() {
        ...
        // Sets the device to landscape orientation during test execution.
        onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE)
        composeTestRule.onNodeWithTag("NavRail").assertIsDisplayed()
        composeTestRule.onNodeWithTag("BottomBar").assertDoesNotExist()
      }
      

স্ক্রিন ভাঁজ খোলার বিরুদ্ধে পরীক্ষা

আপনার অ্যাপটি কোনো ফোল্ডেবল ডিভাইসে থাকলে এবং স্ক্রিনটি খুলে গেলে কী হয়, তা পরীক্ষা করার একটি উদাহরণ এখানে দেওয়া হলো:

  1. প্রথমে, ডিভাইসটি ভাঁজ করা অবস্থায় onDevice().setClosedMode() কল করে পরীক্ষা করুন। নিশ্চিত করুন যে আপনার অ্যাপের লেআউটটি স্ক্রিনের ছোট প্রস্থের সাথে মানিয়ে নিচ্ছে।

      @Test
      fun myUnfoldedTest() {
        onDevice().setClosedMode()
        composeTestRule.onNodeWithTag("BottomBar").assetIsDisplayed()
        composeTestRule.onNodeWithTag("NavRail").assetDoesNotExist()
        ...
      }
      
  2. সম্পূর্ণরূপে খোলা অবস্থায় যেতে, onDevice().setFlatMode() কল করুন। অ্যাপের লেআউটটি প্রসারিত সাইজ ক্লাসের সাথে খাপ খাইয়ে নিচ্ছে কিনা তা পরীক্ষা করুন।

      @Test
      fun myUnfoldedTest() {
        onDevice().setClosedMode()
        ...
        onDevice().setFlatMode()
        composeTestRule.onNodeWithTag("NavRail").assertIsDisplayed()
        composeTestRule.onNodeWithTag("BottomBar").assetDoesNotExist()
      }
      

আপনার পরীক্ষার জন্য কোন কোন ডিভাইস প্রয়োজন তা নির্দিষ্ট করুন।

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

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

@Test
@RequiresDeviceMode(mode = FLAT)
fun myUnfoldedTest() {
  ...
}