Przetestuj swoją aplikację za pomocą interfejsu Espresso Device API, jeśli w urządzeniu występują typowe zmiany konfiguracji, takie jak obrót ekranu czy rozwijanie ekranu. Interfejs Espresso Device API pozwala symulować te zmiany konfiguracji na urządzeniu wirtualnym i synchronicznie wykonywać testy. Dzięki temu w danym momencie wykonywane jest tylko jedno działanie interfejsu lub jedno asercja, a wyniki testu są bardziej wiarygodne. Jeśli nie masz doświadczenia w pisaniu testów interfejsu w Espresso, zapoznaj się z dokumentacją tej usługi.
Aby korzystać z interfejsu Espresso Device API, potrzebujesz:
- Android Studio Iguana lub nowsza
- 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 do obsługi interfejsu Espresso Device API
Aby skonfigurować projekt pod kątem obsługi interfejsu Espresso Device API, wykonaj te czynności:
Aby zezwolić na używanie poleceń testowych na urządzeniu testowym, dodaj uprawnienia
INTERNET
iACCESS_NETWORK_STATE
do pliku manifestu w zbiorze źródłowymandroidTest
:<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permissions.ACCESS_NETWORK_STATE" />
Włącz eksperymentalną flagę
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 } }
Odlotowy
testOptions { emulatorControl { enable = true } }
W skrypcie kompilacji na poziomie modułu zaimportuj bibliotekę urządzenia do espresso do swojego projektu:
Kotlin
dependencies { androidTestImplementation("androidx.test.espresso:espresso-device:3.5.1") }
Odlotowy
dependencies { androidTestImplementation 'androidx.test.espresso:espresso-device:3.5.1' }
Testowanie pod kątem typowych zmian konfiguracji
Espresso Device API ma wiele orientacji ekranu i umożliwia składanie, co pozwala symulować zmiany w konfiguracji urządzenia.
Przetestuj na podstawie obrót ekranu
Ten przykład pokazuje, jak sprawdzić, co dzieje się z aplikacją po obróceniu ekranu urządzenia:
Aby uzyskać spójny stan początkowy, ustaw urządzenie w orientacji pionowej:
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 ustawia na urządzeniu orientację poziomą podczas wykonywania testu:
@Test fun myRotationTest() { ... // Sets the device to landscape orientation during test execution. onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE) ... }
Po obróceniu ekranu sprawdź, czy interfejs prawidłowo dostosowuje się do nowego układu.
@Test fun myRotationTest() { ... // Sets the device to landscape orientation during test execution. onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE) composeTestRule.onNodeWithTag("NavRail").assertIsDisplayed() composeTestRule.onNodeWithTag("BottomBar").assertDoesNotExist() }
Przeprowadź testy względem rozwijania ekranu
Oto przykład, jak sprawdzić, co dzieje się z aplikacją, która zostanie umieszczona na urządzeniu składanym i po otwarciu ekranu:
Najpierw przetestuj złożone urządzenie, wywołując
onDevice().setClosedMode()
. Upewnij się, że 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 pełnego rozłożenia, wywołaj
onDevice().setFlatMode()
. Sprawdź, czy układ aplikacji dostosowuje się do klasy rozmiaru rozwiniętego.@Test fun myUnfoldedTest() { onDevice().setClosedMode() ... onDevice().setFlatMode() composeTestRule.onNodeWithTag("NavRail").assertIsDisplayed() composeTestRule.onNodeWithTag("BottomBar").assetDoesNotExist() }
Określ, jakich urządzeń potrzebują Twoje testy
Jeśli przeprowadzasz test, który wykonuje działania zwijania na urządzeniu, które nie jest składane, test prawdopodobnie zakończy się niepowodzeniem. Aby wykonać tylko te testy, które dotyczą działającego urządzenia, użyj adnotacji @RequiresDeviceMode
. Uruchamiający testy automatycznie pomija testy na urządzeniach, które nie obsługują testowanej konfiguracji. regułę wymagań dotyczących urządzeń możesz dodać do każdego testu lub do całej klasy testowej;
Aby np. wskazać, że test powinien być przeprowadzany tylko na urządzeniach, które obsługują rozwijanie do płaskiej konfiguracji, dodaj do testu ten kod @RequiresDeviceMode
:
@Test
@RequiresDeviceMode(mode = FLAT)
fun myUnfoldedTest() {
...
}