Espresso Device API'yi kullanarak ekran yapılandırma değişikliklerine göre test etme

Cihazda döndürme ve ekranı açma gibi yaygın yapılandırma değişiklikleri olduğunda uygulamanızı test etmek için Espresso Device API'yi kullanın. Espresso Device API, Jetpack Compose test kurallarınızla birlikte cihaz düzeyindeki işlemleri simüle etmek için önerilen araçtır. Jetpack Compose için kullanıcı arayüzü testi yazmaya yeni başladıysanız Compose düzeninizi test etme başlıklı makaleyi inceleyin.

Espresso Device API, sanal bir cihazda yapılandırma değişikliklerini simüle etmenize ve testlerinizi eşzamanlı olarak yürütmenize olanak tanır. Böylece, her seferinde yalnızca bir kullanıcı arayüzü işlemi veya onaylama gerçekleşir ve test sonuçlarınız daha güvenilir olur. Espresso ile kullanıcı arayüzü testleri yazmaya yeni başladıysanız dokümanlarına göz atın.

Espresso Device API'yi kullanmak için aşağıdakilere ihtiyacınız vardır:

  • Android Studio Iguana veya sonraki sürümler
  • Android Gradle eklentisi 8.3 veya sonraki bir sürüm
  • Android Emulator 33.1.10 veya sonraki sürümler
  • API seviyesi 24 veya daha yeni bir sürümü çalıştıran Android sanal cihaz

Projenizi Espresso Device API için ayarlama

Projenizi Espresso Device API'yi destekleyecek şekilde ayarlamak için aşağıdakileri yapın:

  1. Testin, test cihazına komut iletmesine izin vermek için INTERNET ve ACCESS_NETWORK_STATE izinlerini androidTest kaynak grubundaki manifest dosyasına ekleyin:

      <uses-permission android:name="android.permission.INTERNET" />
      <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    
  2. enableEmulatorControl deneysel işaretini gradle.properties dosyasında etkinleştirin:

      android.experimental.androidTest.enableEmulatorControl=true
    
  3. Modül düzeyindeki derleme komut dosyasında emulatorControl seçeneğini etkinleştirin:

    Kotlin

      testOptions {
        emulatorControl {
          enable = true
        }
      }
      

    Modern

      testOptions {
        emulatorControl {
          enable = true
        }
      }
      
  4. Modül düzeyindeki derleme komut dosyasında Espresso Device kitaplığını projenize aktarın:

    Kotlin

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

    Modern

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

Sık yapılan yapılandırma değişikliklerine karşı test etme

Espresso Device API'de, cihaz yapılandırma değişikliklerini simüle etmek için kullanabileceğiniz birden fazla ekran yönü ve katlanabilir durum bulunur. Aşağıdaki örneklerde, Compose test kurallarını kullanarak bu cihaz durumlarının nasıl tetikleneceği ve sonuçtaki kullanıcı arayüzü değişikliklerinin nasıl doğrulanacağı gösterilmektedir.

Ekran döndürmeye karşı test etme

Cihaz ekranı döndürüldüğünde uygulamanızda ne olduğunu test etme ile ilgili bir örneği aşağıda bulabilirsiniz:

  1. İlk olarak, Compose test kuralınızı tanımlayın ve cihazı tutarlı bir başlangıç durumuna (ör. dikey mod) ayarlayın:

    import androidx.compose.ui.test.assertIsDisplayed
    import androidx.compose.ui.test.assertDoesNotExist
    import androidx.compose.ui.test.junit4.createComposeRule
    import androidx.compose.ui.test.onNodeWithTag
    import androidx.test.espresso.device.EspressoDevice.onDevice
    import androidx.test.espresso.device.action.ScreenOrientation
    import androidx.test.espresso.device.rules.ScreenOrientationRule
    import org.junit.Rule
    import org.junit.Test
    
    class MyConfigurationTest {
    
        // 1. Define the Compose test rule
        @get:Rule
        val composeTestRule = createComposeRule()
    
        // 2. Define the Espresso Device rule for a consistent starting state
        @get:Rule
        val screenOrientationRule = ScreenOrientationRule(ScreenOrientation.PORTRAIT)
    }
    
  2. Test yürütme sırasında cihazı yatay yöne ayarlayan bir test oluşturun:

    @Test
    fun myRotationTest() {
      ...
      // Sets the device to landscape orientation during test execution.
      onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE)
      ...
    }
    
  3. Ekran döndükten sonra, composable'larınızın yeni duruma beklendiği gibi uyum sağladığını kontrol etmek için composeTestRule tuşunu kullanın.

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

Ekran açılma durumuna karşı test etme

Katlanabilir bir cihazda bulunan uygulamanızın ekranı açıldığında ne olacağını test etme örneğini aşağıda bulabilirsiniz:

  1. Öncelikle onDevice().setClosedMode() numarasını arayarak cihazı katlı durumdayken test edin. Composable işlevlerinizin kompakt ekran genişliğine uyum sağladığından emin olun.

    @Test
    fun myUnfoldedTest() {
      onDevice().setClosedMode()
      composeTestRule.onNodeWithTag("BottomBar").assertIsDisplayed()
      composeTestRule.onNodeWithTag("NavRail").assertDoesNotExist()
      ...
    }
    
  2. Tamamen açılmış duruma geçmek için onDevice().setFlatMode() işlevini çağırın. Composable'ların genişletilmiş boyut sınıfına uyum sağladığını kontrol edin.

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

Testlerinizin hangi cihazlara ihtiyacı olduğunu belirtin

Katlanabilir olmayan bir cihazda katlama işlemleri gerçekleştiren bir test çalıştırıyorsanız testin başarısız olması muhtemeldir. Yalnızca çalışan cihazla alakalı testleri yürütmek için @RequiresDeviceMode ek açıklamasını kullanın. Test çalıştırıcı, test edilen yapılandırmayı desteklemeyen cihazlarda test çalıştırmayı otomatik olarak atlar. Cihaz koşulu kuralını her teste veya test sınıfının tamamına ekleyebilirsiniz.

Örneğin, bir testin yalnızca düz yapılandırmaya açılmayı destekleyen cihazlarda çalıştırılması gerektiğini belirtmek için testinize aşağıdaki @RequiresDeviceMode kodunu ekleyin:

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