Użyj interfejsu Espresso Device API, aby przetestować aplikację, gdy urządzenie przechodzi typowe zmiany konfiguracji, takie jak obrót i rozkładanie ekranu. Interfejs Espresso Device API umożliwia symulowanie tych zmian konfiguracji na urządzeniu wirtualnym i synchroniczne wykonywanie testów, dzięki czemu w danym momencie wykonywana jest tylko jedna czynność lub asercja 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, musisz mieć:
- Android Studio Iguana lub nowszy
- Wtyczka Androida do obsługi Gradle w wersji 8.3 lub nowszej
- Emulator Androida w wersji 33.1.10 lub nowszej
- wirtualne urządzenie z Androidem z interfejsem API na poziomie 24 lub wyższym,
Konfigurowanie projektu pod kątem interfejsu Espresso Device API
Aby skonfigurować projekt tak, aby obsługiwał interfejs Espresso Device API, wykonaj te czynności:
Aby test mógł przekazywać polecenia do urządzenia testowego, dodaj uprawnienia
INTERNET
iACCESS_NETWORK_STATE
do 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 flagę eksperymentalną
enableEmulatorControl
w plikugradle.properties
:android.experimental.androidTest.enableEmulatorControl=true
Włącz opcję
emulatorControl
w skrypcie kompilacji na poziomie modułu:Kotlin
testOptions { emulatorControl { enable = true } }
Groovy
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") }
Groovy
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 stanów składania, których możesz używać do symulowania zmian konfiguracji urządzenia.
Testowanie obrotu ekranu
Oto przykład testowania działania aplikacji po obróceniu ekranu urządzenia:
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 ustawia 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 przy rozkładaniu ekranu
Oto przykład testowania, co się stanie z aplikacją, gdy będzie ona działać na urządzeniu składanym i ekran się rozłoży:
Najpierw przetestuj urządzenie w stanie złożonym, dzwoniąc pod numer
onDevice().setClosedMode()
. Sprawdź, czy układ aplikacji dostosowuje się do niewielkiej 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 funkcję
onDevice().setFlatMode()
. Sprawdź, czy układ aplikacji dostosowuje się do powiększonej klasy rozmiaru.@Test fun myUnfoldedTest() { onDevice().setClosedMode() ... onDevice().setFlatMode() composeTestRule.onNodeWithTag("NavRail").assertIsDisplayed() composeTestRule.onNodeWithTag("BottomBar").assetDoesNotExist() }
Określ, jakich urządzeń potrzebujesz do testów
Jeśli przeprowadzisz test, który wykonuje czynności składania na urządzeniu, które nie jest składane, test prawdopodobnie się nie powiedzie. Aby uruchomić tylko testy odpowiednie dla urządzenia, na którym są przeprowadzane, 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 do całej klasy testów.
Jeśli na przykład chcesz określić, że test ma być przeprowadzany tylko na urządzeniach, które obsługują rozkładanie do płaskiej konfiguracji, dodaj do testu ten kod @RequiresDeviceMode
:
@Test
@RequiresDeviceMode(mode = FLAT)
fun myUnfoldedTest() {
...
}