Testowanie jest nieodłączną częścią procesu tworzenia aplikacji. Zazwyczaj uruchamiasz aplikacje 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 wykorzystywania jednego urządzenia do tworzenia aplikacji. W rezultacie 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. Automatyczne testy umożliwiają wczesne wykrywanie problemów i zmniejszają ryzyko, że będą one miały wpływ na wygodę 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 dostosowujesz interfejs użytkownika do różnych rozmiarów okna, sprawdź, czy interfejs użytkownika 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 ustalenie 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 Compose użyj
StateRestorationTester
, aby symulować zmianę konfiguracji w skuteczny sposób 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 utworzenie 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 inny 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 Espresso Device 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ć uwzględnione 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 Automatyczne testy 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.