Użyj interfejsu Espresso Device API, aby testować aplikację, gdy urządzenie przechodzi typowe zmiany konfiguracji, takie jak obrót i rozłożenie ekranu. Interfejs Espresso Device API umożliwia symulowanie tych zmian konfiguracji na urządzeniu wirtualnym i synchroniczne wykonywanie testów. Dzięki temu w danym momencie wykonywane jest tylko jedno działanie lub sprawdzanie interfejsu, a wyniki testów są bardziej wiarygodne. Jeśli dopiero zaczynasz pisać testy interfejsu za pomocą Espresso, zapoznaj się z jego dokumentacją.
Aby korzystać z interfejsu Espresso Device API, potrzebujesz:
- Androida Studio Iguana lub nowszego,
- wtyczki Androida do obsługi Gradle w wersji 8.3 lub nowszej,
- Androida Emulatora w wersji 33.1.10 lub nowszej,
- wirtualnego urządzenia z Androidem, które działa na poziomie API 24 lub nowszym.
Konfigurowanie projektu pod kątem interfejsu Espresso Device API
Aby skonfigurować projekt tak, aby obsługiwał interfejs Espresso Device API:
Aby test mógł przekazywać polecenia do urządzenia testowego, dodaj uprawnienia
INTERNETiACCESS_NETWORK_STATEdo pliku manifestu w zestawie źródełandroidTest:<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Włącz eksperymentalną flagę
enableEmulatorControlw plikugradle.properties:android.experimental.androidTest.enableEmulatorControl=true
Włącz opcję
emulatorControlw skrypcie kompilacji na poziomie modułu:Kotlin
testOptions { emulatorControl { enable = true } }
Dynamiczny
testOptions { emulatorControl { enable = true } }
W skrypcie kompilacji na poziomie modułu zaimportuj do projektu bibliotekę Espresso Device:
Kotlin
dependencies { androidTestImplementation("androidx.test.espresso:espresso-device:1.0.1") }
Dynamiczny
dependencies { androidTestImplementation 'androidx.test.espresso:espresso-device:1.0.1' }
Testowanie pod kątem typowych zmian konfiguracji
Interfejs Espresso Device API ma wiele stanów orientacji ekranu i składania, których możesz użyć do symulowania zmian konfiguracji urządzenia.
Testowanie pod kątem obrotu ekranu
Oto przykład testowania, co się stanie z aplikacją, gdy ekran urządzenia się obróci:
Najpierw ustaw urządzenie w trybie pionowym, aby uzyskać spójny stan początkowy:
import androidx.test.espresso.device.action.ScreenOrientation import androidx.test.espresso.device.rules.ScreenOrientationRule ... @get:Rule val screenOrientationRule: ScreenOrientationRule = ScreenOrientationRule(ScreenOrientation.PORTRAIT)
Utwórz test, który podczas wykonywania ustawi urządzenie w orientacji poziomej:
@Test fun myRotationTest() { ... // Sets the device to landscape orientation during test execution. onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE) ... }
Po obróceniu ekranu sprawdź, czy interfejs dostosowuje się do nowego układu zgodnie z oczekiwaniami.
@Test fun myRotationTest() { ... // Sets the device to landscape orientation during test execution. onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE) composeTestRule.onNodeWithTag("NavRail").assertIsDisplayed() composeTestRule.onNodeWithTag("BottomBar").assertDoesNotExist() }
Testowanie pod kątem rozłożenia ekranu
Oto przykład testowania, co się stanie z aplikacją, jeśli jest ona na urządzeniu składanym, a ekran się rozłoży:
Najpierw przetestuj urządzenie w stanie złożonym, wywołując
onDevice().setClosedMode(). Sprawdź, czy układ aplikacji dostosowuje się do kompaktowej szerokości ekranu.@Test fun myUnfoldedTest() { onDevice().setClosedMode() composeTestRule.onNodeWithTag("BottomBar").assetIsDisplayed() composeTestRule.onNodeWithTag("NavRail").assetDoesNotExist() ... }
Aby przejść do stanu całkowicie rozłożonego, wywołaj
onDevice().setFlatMode(). Sprawdź, czy układ aplikacji dostosowuje się do rozszerzonej klasy rozmiaru.@Test fun myUnfoldedTest() { onDevice().setClosedMode() ... onDevice().setFlatMode() composeTestRule.onNodeWithTag("NavRail").assertIsDisplayed() composeTestRule.onNodeWithTag("BottomBar").assetDoesNotExist() }
Określanie, jakich urządzeń wymagają testy
Jeśli uruchamiasz test, który wykonuje działania składania na urządzeniu, które nie jest składane, test prawdopodobnie się nie powiedzie. Aby wykonywać tylko testy odpowiednie dla uruchomionego urządzenia, użyj adnotacji @RequiresDeviceMode. Program do uruchamiania testów automatycznie pomija testy na urządzeniach, które nie obsługują testowanej konfiguracji. Regułę dotyczącą wymagań urządzenia możesz dodać do każdego testu lub całej klasy testowej.
Aby na przykład określić, że test ma być uruchamiany tylko na urządzeniach, które obsługują rozkładanie do konfiguracji płaskiej, dodaj do testu ten kod @RequiresDeviceMode:
@Test
@RequiresDeviceMode(mode = FLAT)
fun myUnfoldedTest() {
...
}