ทดสอบการเปลี่ยนแปลงการกำหนดค่าหน้าจอด้วย Espresso Device API

ใช้ Espresso Device API เพื่อทดสอบแอปเมื่ออุปกรณ์พบการดำเนินการทั่วไป การเปลี่ยนแปลงการกำหนดค่า เช่น การหมุนและการกางหน้าจอ กาแฟเอสเปรสโซ API ของอุปกรณ์ช่วยให้คุณจำลองการเปลี่ยนแปลงการกำหนดค่าเหล่านี้ในอุปกรณ์เสมือนและ ทำการทดสอบแบบซิงโครนัส ดังนั้นจะมีการดำเนินการ UI หรือการยืนยันเพียง 1 รายการเท่านั้น และผลการทดสอบมีความน่าเชื่อถือมากขึ้น หากคุณเพิ่งเริ่มใช้ UI การเขียน โปรดดูการทดสอบกับ Espresso ในเอกสารประกอบ

หากต้องการใช้ Espresso Device API คุณต้องมีสิ่งต่อไปนี้

  • Android Studio Iguana ขึ้นไป
  • ปลั๊กอิน Android Gradle เวอร์ชัน 8.3 ขึ้นไป
  • โปรแกรมจำลอง Android 33.1.10 ขึ้นไป
  • อุปกรณ์เสมือน Android ที่ใช้ API ระดับ 24 ขึ้นไป

ตั้งค่าโปรเจ็กต์สำหรับ Espresso Device API

วิธีตั้งค่าโปรเจ็กต์ให้รองรับ Espresso Device API มีดังนี้

  1. หากต้องการให้คำสั่งทดสอบส่งผ่านไปยังอุปกรณ์ทดสอบ ให้เพิ่มเมธอด สิทธิ์ของ INTERNET และ ACCESS_NETWORK_STATE ในไฟล์ Manifest ในชุดต้นฉบับ androidTest:

      <uses-permission android:name="android.permission.INTERNET" />
      <uses-permission android:name="android.permissions.ACCESS_NETWORK_STATE" />
      
  2. เปิดใช้ Flag enableEmulatorControl เวอร์ชันทดลองใน ไฟล์ gradle.properties:

      android.experimental.androidTest.enableEmulatorControl=true
      
  3. เปิดใช้ตัวเลือก emulatorControl ในบิลด์ระดับโมดูล สคริปต์:

    Kotlin

      testOptions {
        emulatorControl {
          enable = true
        }
      }
      

    ดึงดูด

      testOptions {
        emulatorControl {
          enable = true
        }
      }
      
  4. ในสคริปต์บิลด์ระดับโมดูล ให้นำเข้าไลบรารีอุปกรณ์ Espresso ลงในโปรเจ็กต์ของคุณ:

    Kotlin

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

    ดึงดูด

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

ทดสอบการเปลี่ยนแปลงการกำหนดค่าทั่วไป

Espresso Device API มีการวางแนวหน้าจอหลายแบบและสถานะแบบพับได้ เพื่อจำลองการเปลี่ยนแปลงการกำหนดค่าอุปกรณ์

ทดสอบเทียบกับการหมุนหน้าจอ

ต่อไปนี้คือตัวอย่างวิธีทดสอบสิ่งที่จะเกิดขึ้นกับแอปของคุณเมื่อหน้าจอของอุปกรณ์ หมุน:

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