Testowanie jest nieodłączną częścią procesu tworzenia aplikacji. Zazwyczaj aplikacje uruchamia się na emulatorze lub urządzeniu, aby ręcznie sprawdzić, czy kod działa zgodnie z oczekiwaniami. Ręczne testowanie jest jednak czasochłonne, podatne na błędy i często niewykonalne w przypadku aplikacji działających na ekranach i urządzeniach o różnych rozmiarach. Problemy z ręcznym testowaniem najczęściej wynikają z używania jednego urządzenia do tworzenia aplikacji. W efekcie błędy mogą pozostać niezauważone na innych urządzeniach o innych formatach.
Aby wykrywać regresje na różnych rozmiarach okna i ekranu, wdróż testy automatyczne, które sprawdzają, czy aplikacja zachowuje spójny wygląd i działanie na różnych formatach. Testy automatyczne wykrywają problemy na wczesnym etapie, zmniejszając ryzyko, że wpłyną one na komfort użytkowników.
Co testować
Podczas tworzenia interfejsu użytkownika na potrzeby różnych rozmiarów ekranów i okien należy zwrócić szczególną uwagę na 2 aspekty:
- jak atrybuty wizualne komponentów i układów różnią się w przypadku okien o różnych rozmiarach.
- Jak stan jest zachowywany w przypadku zmian konfiguracji
Atrybuty wizualne
Niezależnie od tego, czy dostosujesz interfejs użytkownika do różnych rozmiarów okna, powinieneś sprawdzić, czy interfejs jest wyświetlany prawidłowo. Weź pod uwagę szerokości i wysokość w wersji kompaktowej, średniej i rozszerzonej. Zalecane punkty przecięcia znajdziesz w sekcji Klasy rozmiarów okna.

Ponadto aplikacja może nie renderować niektórych komponentów w systemie projektowania zgodnie z oczekiwaniami, gdy ich ograniczenia rozmiaru zostaną przekroczone.
Jeśli Twoja aplikacja ma układy adaptacyjne na różne rozmiary okna, powinna mieć automatyczne testy, aby zapobiec regresji. Na przykład ustawienie marginesu na telefonie może spowodować niespójności układu na tablecie. Utwórz testy UI, aby sprawdzić zachowanie układów i komponentów, lub skonfiguruj testy zrzutów ekranu, aby wizualnie zweryfikować układy.
Przywracanie stanu
Aplikacje działające na urządzeniach takich jak tablety są obracane i zmieniają rozmiar znacznie częściej niż aplikacje na telefonach. Ponadto składane urządzenia wprowadzają nowe funkcje wyświetlacza, takie jak składanie i rozkładanie, które mogą powodować zmiany konfiguracji. Aplikacja musi mieć możliwość przywrócenia stanu, gdy nastąpią zmiany konfiguracji. Musisz też napisać testy, które potwierdzą, że aplikacja przywraca stan prawidłowo.

Najpierw sprawdź, czy aplikacja nie ulega awarii po wprowadzeniu zmian w konfiguracji. Upewnij się, że każdy interfejs w aplikacji obsługuje dowolną kombinację obracania, zmiany rozmiaru lub składania. Zmiany konfiguracji powodują, że domyślnie tworzona jest nowa aktywność, co powoduje niektóre awarie z powodu założeń dotyczących trwałości aktywności.
Zmiany konfiguracji można testować na różne sposoby, ale w większości przypadków są 2 metody testowania:
- W sekcji Komponowanie użyj polecenia
StateRestorationTester
, aby symulować zmianę konfiguracji bez restartowania aktywności. Więcej informacji znajdziesz w następnych sekcjach. - W dowolnym teście interfejsu użytkownika, takim jak Espresso czy Compose, symuluj zmianę konfiguracji, wywołując
Activity.recreate()
.
Zazwyczaj nie trzeba używać różnych urządzeń do testowania przywracania stanu w odpowiedzi na zmiany konfiguracji. Dzieje się tak, ponieważ wszystkie zmiany konfiguracji, które powodują ponowne wykonanie aktywności, mają podobne konsekwencje. Niektóre zmiany konfiguracji mogą jednak powodować uruchamianie różnych mechanizmów przywracania stanu na określonych urządzeniach.
Jeśli na przykład użytkownik przegląda interfejs listy z informacjami na otwartym urządzeniu składanym i składa urządzenie, aby przełączyć się na wyświetlacz przedni, interfejs zazwyczaj przełącza się na stronę szczegółów. Automatyczny test powinien obejmować przywrócenie stanu interfejsu użytkownika, w tym stanu nawigacji.
Aby przetestować zmiany konfiguracji, które występują na urządzeniach podczas przechodzenia z jednego ekranu na drugi lub podczas uruchamiania trybu wielookienkowego, masz do wyboru kilka opcji:
- Zmień rozmiar ekranu podczas testu na dowolnym urządzeniu. W większości przypadków powoduje to uruchomienie wszystkich mechanizmów przywracania stanu, które musisz zweryfikować. Test ten nie będzie jednak działać w przypadku logiki, która wykrywa określone postawy w urządzeniach składanych, ponieważ zmiany postawy nie powodują zmiany konfiguracji.
- Używając urządzenia lub emulatora obsługującego funkcje, które chcesz przetestować, wywołaj odpowiednie zmiany konfiguracji. Na przykład za pomocą urządzenia Espresso można sterować składanym urządzeniem lub tabletem, aby je złożyć lub otworzyć w orientacji poziomej. Przykłady znajdziesz w sekcji Urządzenie Espresso w bibliotekach i narzędziach do testowania różnych rozmiarów ekranu.
Typy testów dla różnych rozmiarów ekranu i okna
W przypadku każdego zastosowania używaj odpowiedniego typu testu, aby sprawdzić, czy działa on prawidłowo w różnych formatach:
Testy zachowania interfejsu użytkownika uruchamiają część interfejsu aplikacji, np. wyświetlanie aktywności. Testy sprawdzają, czy określone elementy istnieją lub mają określone atrybuty . Testy mogą opcjonalnie wykonywać symulowane działania użytkownika. Do wyświetlania danych używaj Espresso. Jetpack Compose ma własne interfejsy API do testowania. Testy zachowania interfejsu mogą być zaimplementowane lub lokalne. Testy z użyciem instrumentacji są przeprowadzane na urządzeniach lub emulatorach, a testy interfejsu użytkownika na poziomie lokalnym są wykonywane w Robolectric w JVM.
Używaj testów zachowania interfejsu, aby sprawdzić, czy implementacja nawigacji w aplikacji jest prawidłowa. Testy wykonują takie działania jak kliknięcia i przesunięcia. Testy zachowania interfejsu użytkownika sprawdzają też istnienie określonych elementów lub właściwości. Więcej informacji znajdziesz w artykule Automatyzacja testów interfejsu użytkownika.
Testy zrzutów ekranu polegają na zrobieniu zrzutu ekranu interfejsu lub komponentu i porównaniu go z poprzednio zatwierdzonym zrzutem ekranu. Jest to bardzo skuteczny sposób ochrony przed regresją, ponieważ jeden zrzut ekranu może obejmować dużą liczbę elementów i ich właściwości wizualnych. Testy zrzutów ekranu możesz przeprowadzać na JVM lub na urządzeniach. Dostępnych jest kilka ramek testów zrzutów ekranu. Więcej informacji znajdziesz w testach zrzutów ekranu.
Na koniec możesz potrzebować testów jednostkowych, aby sprawdzić działanie jednostek logiki, które zachowują się inaczej w zależności od typu urządzenia lub rozmiaru okna. Testy jednostkowe są jednak mniej popularne w tym obszarze.
Dalsze kroki
Więcej informacji o wdrażaniu kontroli opisanych w tym dokumencie znajdziesz w sekcji Biblioteki i narzędzia.