Testowanie jest nieodłączną częścią procesu tworzenia aplikacji. Zwykle 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 związane z ręcznym testowaniem najczęściej wynikają z używania jednego urządzenia do tworzenia. 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, wprowadź testy automatyczne, które sprawdzają, czy zachowanie i wygląd aplikacji są spójne na różnych formatach. Automatyczne testy umożliwiają wczesnym wykrywanie problemów, co zmniejsza ryzyko ich wpływu 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 dostosujesz 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 do różnych rozmiarów 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ą te zmiany konfiguracji. Musisz też napisać testy, które potwierdzą, że aplikacja prawidłowo przywraca stan.
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 spowodowane założeniami dotyczącymi trwałości aktywności.
Zmiany konfiguracji można testować na wiele sposobów, ale w większości przypadków są 2 metody testowania:
- W Compose 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. Test automatyczny 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 wielookiennego, 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. Za pomocą urządzenia Espresso można na przykład sterować składanym urządzeniem lub tabletem, aby przełączyć je z pozycji złożonej do rozłożonej 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
Używaj odpowiedniego typu testu w przypadku każdego zastosowania, 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świetleń używaj Espresso. Jetpack Compose ma własne interfejsy API do testowania. Testy zachowania interfejsu mogą być z wykorzystaniem instrumentacji 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 artykule o 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.