Użyj interfejsu Espresso Device API, aby przetestować aplikację, gdy na urządzeniu występują powszechne problemy zmian konfiguracji, takich jak obrót i rozwijanie ekranu. Espresso Interfejs Device API umożliwia symulację zmian konfiguracji na urządzeniu wirtualnym oraz wykonuje testy synchronicznie, więc na stronie odbywa się tylko jedno działanie interfejsu lub jedno asercja w konkretnym czasie, a wyniki testu będą bardziej wiarygodne. Jeśli nie masz doświadczenia z interfejsem do pisania testów za pomocą Espresso znajdziesz w jego dokumentacji.
Aby korzystać z interfejsu Espresso Device API, musisz mieć:
- 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
- Urządzenie wirtualne z Androidem, na którym działa interfejs API na poziomie 24 lub wyższym
Konfigurowanie projektu pod kątem interfejsu Espresso Device API
Aby skonfigurować projekt do obsługi interfejsu Espresso Device API, wykonaj te czynności:
Aby umożliwić działanie poleceń testowych na urządzeniu testowym, dodaj do 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 flagę eksperymentu
enableEmulatorControl
w Plikgradle.properties
:android.experimental.androidTest.enableEmulatorControl=true
Włącz opcję
emulatorControl
w kompilacji na poziomie modułu skrypt:Kotlin
testOptions { emulatorControl { enable = true } }
Odlotowe
testOptions { emulatorControl { enable = true } }
Zaimportuj bibliotekę Espresso Device Policy w skrypcie kompilacji na poziomie modułu. do swojego projektu.
Kotlin
dependencies { androidTestImplementation("androidx.test.espresso:espresso-device:1.0.0-beta01") }
Odlotowe
dependencies { androidTestImplementation 'androidx.test.espresso:espresso-device:1.0.0-beta01' }
Testowanie pod kątem typowych zmian w konfiguracji
Espresso Device API może mieć wiele orientacji ekranu i możliwość złożenia co pozwala symulować zmiany w konfiguracji urządzenia.
Przeprowadź test względem obrotu ekranu
Oto przykład, jak sprawdzić, co dzieje się z aplikacją, gdy ekran urządzenia obraca się:
Aby uzyskać spójny stan początkowy, ustaw urządzenie w orientacji pionowej tryb:
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 testu ustawi na urządzeniu orientację poziomą wykonanie:
@Test fun myRotationTest() { ... // Sets the device to landscape orientation during test execution. onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE) ... }
Po obróceniu ekranu sprawdź, czy UI 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() }
Przetestuj rozłożenie ekranu
Oto przykład, jak sprawdzić, co dzieje się z aplikacją na urządzeniu składanym i wyświetla się ekran:
Najpierw przetestuj złożone urządzenie, wywołując połączenie
onDevice().setClosedMode()
Dopilnuj, aby układ aplikacji dostosowuje się do szerokości niewielkiego ekranu.@Test fun myUnfoldedTest() { onDevice().setClosedMode() composeTestRule.onNodeWithTag("BottomBar").assetIsDisplayed() composeTestRule.onNodeWithTag("NavRail").assetDoesNotExist() ... }
Aby przełączyć się do stanu pełnego rozłożenia, wywołaj
onDevice().setFlatMode()
Sprawdź, czy układ aplikacji dostosowuje się do do klasy rozmiaru rozwiniętej.@Test fun myUnfoldedTest() { onDevice().setClosedMode() ... onDevice().setFlatMode() composeTestRule.onNodeWithTag("NavRail").assertIsDisplayed() composeTestRule.onNodeWithTag("BottomBar").assetDoesNotExist() }
Określ urządzenia, których potrzebują testy
Jeśli testujesz składanie elementów na urządzeniu, które nie jest
lub składa się, test prawdopodobnie się nie powiedzie. Przeprowadzanie tylko istotnych testów
do uruchomionego urządzenia, użyj adnotacji @RequiresDeviceMode
. Zawodnik wykonujący test
automatycznie pomija testy na urządzeniach, które nie obsługują
testowanej konfiguracji. Do każdego testu możesz dodać regułę wymagań dotyczących urządzeń
lub całej klasy testowej.
Aby na przykład określić, że test powinien być uruchamiany tylko na urządzeniach, które obsługują
rozwija się do konfiguracji płaskiej, dodaj ten kod @RequiresDeviceMode
do testu:
@Test
@RequiresDeviceMode(mode = FLAT)
fun myUnfoldedTest() {
...
}