Menguji perubahan konfigurasi layar dengan Espresso Device API

Gunakan Espresso Device API untuk menguji aplikasi saat perangkat mengalami perubahan konfigurasi umum, seperti rotasi dan pembukaan layar. Espresso Device API memungkinkan Anda menyimulasikan perubahan konfigurasi ini di perangkat virtual dan menjalankan pengujian secara sinkron, sehingga hanya satu tindakan atau pernyataan UI yang terjadi sekaligus dan hasil pengujian Anda lebih andal. Jika Anda baru menulis pengujian UI dengan Espresso, lihat dokumentasinya.

Untuk menggunakan Espresso Device API, Anda memerlukan hal berikut:

  • Android Studio Iguana atau yang lebih baru
  • Plugin Android Gradle 8.3 atau yang lebih tinggi
  • Android Emulator 33.1.10 atau yang lebih tinggi
  • Perangkat virtual Android yang menjalankan API level 24 atau yang lebih tinggi

Menyiapkan project untuk Espresso Device API

Untuk menyiapkan project agar mendukung Espresso Device API, lakukan hal berikut:

  1. Agar pengujian dapat meneruskan perintah ke perangkat pengujian, tambahkan izin INTERNET dan ACCESS_NETWORK_STATE ke file manifes di set sumber androidTest:

      <uses-permission android:name="android.permission.INTERNET" />
      <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
      
  2. Aktifkan tanda eksperimental enableEmulatorControl dalam file gradle.properties:

      android.experimental.androidTest.enableEmulatorControl=true
      
  3. Aktifkan opsi emulatorControl dalam skrip build level modul:

    Kotlin

      testOptions {
        emulatorControl {
          enable = true
        }
      }
      

    Groovy

      testOptions {
        emulatorControl {
          enable = true
        }
      }
      
  4. Dalam skrip build level modul, impor library Perangkat Espresso ke project Anda:

    Kotlin

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

    Groovy

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

Menguji terhadap perubahan konfigurasi umum

Espresso Device API memiliki beberapa orientasi layar dan status perangkat foldable yang dapat Anda gunakan untuk menyimulasikan perubahan konfigurasi perangkat.

Menguji terhadap rotasi layar

Berikut adalah contoh cara menguji hal yang terjadi pada aplikasi Anda saat layar perangkat diputar:

  1. Pertama, untuk status awal yang konsisten, tetapkan perangkat ke mode potret:

      import androidx.test.espresso.device.action.ScreenOrientation
      import androidx.test.espresso.device.rules.ScreenOrientationRule
      ...
      @get:Rule
      val screenOrientationRule: ScreenOrientationRule = ScreenOrientationRule(ScreenOrientation.PORTRAIT)
      
  2. Buat pengujian yang menetapkan perangkat ke orientasi lanskap selama eksekusi pengujian:

      @Test
      fun myRotationTest() {
        ...
        // Sets the device to landscape orientation during test execution.
        onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE)
        ...
      }
      
  3. Setelah layar diputar, pastikan UI beradaptasi dengan tata letak baru seperti yang diharapkan.

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

Menguji terhadap pembukaan layar

Berikut adalah contoh cara menguji apa yang terjadi pada aplikasi Anda jika berada di perangkat foldable dan layar dibentangkan:

  1. Pertama, uji dengan perangkat dalam status terlipat dengan memanggil onDevice().setClosedMode(). Pastikan tata letak aplikasi Anda beradaptasi dengan lebar layar yang ringkas.

      @Test
      fun myUnfoldedTest() {
        onDevice().setClosedMode()
        composeTestRule.onNodeWithTag("BottomBar").assetIsDisplayed()
        composeTestRule.onNodeWithTag("NavRail").assetDoesNotExist()
        ...
      }
      
  2. Untuk bertransisi ke status yang sepenuhnya dibentangkan, panggil onDevice().setFlatMode(). Pastikan tata letak aplikasi beradaptasi dengan class ukuran yang diperluas.

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

Menentukan perangkat yang diperlukan pengujian Anda

Jika Anda menjalankan pengujian yang melakukan tindakan lipat pada perangkat yang tidak dapat dilipat, pengujian kemungkinan akan gagal. Untuk hanya menjalankan pengujian yang relevan dengan perangkat yang sedang berjalan, gunakan anotasi @RequiresDeviceMode. Runner pengujian otomatis melewati pengujian yang berjalan di perangkat yang tidak mendukung konfigurasi yang sedang diuji. Anda dapat menambahkan aturan persyaratan perangkat ke setiap pengujian atau seluruh class pengujian.

Misalnya, untuk menentukan bahwa pengujian hanya boleh dijalankan di perangkat yang mendukung pengembangan ke konfigurasi datar, tambahkan kode @RequiresDeviceMode berikut ke pengujian Anda:

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