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

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

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

  • অ্যান্ড্রয়েড স্টুডিও ইগুয়ানা বা উচ্চতর
  • অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৮.৩ বা তার বেশি
  • অ্যান্ড্রয়েড এমুলেটর ৩৩.১.১০ বা তার বেশি
  • অ্যান্ড্রয়েড ভার্চুয়াল ডিভাইস যা API লেভেল 24 বা তার বেশি চালায়

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

আপনার প্রকল্পটি সেট আপ করতে যাতে এটি Espresso ডিভাইস 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. মডিউল-স্তরের বিল্ড স্ক্রিপ্টে, আপনার প্রকল্পে এসপ্রেসো ডিভাইস লাইব্রেরি আমদানি করুন:

    কোটলিন

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