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 związane z ręcznym testowaniem są najczęściej wynikiem korzystania z 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, 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 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 do różnych rozmiarów okna, powinna mieć automatyczne testy, aby zapobiec regresji. Na przykład poprawienie marginesu na telefonie może powodować niespójności w układzie 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. Urządzenia składane oferują też nowe możliwości wyświetlacza, np. składanie i otwieranie, które mogą powodować zmiany konfiguracji. Aplikacja musi mieć możliwość przywrócenia stanu, gdy nastąpią te zmiany konfiguracji. Następnie musisz też napisać testy, które potwierdzi, że aplikacja jest przywracana 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 spowodowane założeniami dotyczącymi 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 Tworzenie 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 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łączy się na stronę szczegółów. Zautomatyzowany test powinien obejmować przywrócenie stanu UI, w tym stan 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. Na przykład urządzeniem składanym lub tabletem można sterować za pomocą urządzenia do espresso, aby przejść ze złożonego na otwarte płasko w poziomie. 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 instrumentalne są przeprowadzane na urządzeniach lub emulatorach, a lokalne testy interfejsu – na Robolectric na JVM.
Użyj 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.
Testy zrzutów ekranu polegają na zrobieniu zrzutu ekranu interfejsu lub komponentu i porównaniu go z poprzednio zatwierdzonym zrzutem ekranu. To bardzo skuteczny sposób ochrony przed regresjami, ponieważ pojedynczy 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 mogą być potrzebne testy jednostkowe, by sprawdzić działanie jednostek logiki, które działają różnie w zależności od typu urządzenia lub rozmiaru okna, ale testy jednostkowe są w tej dziedzinie rzadziej używane.
Dalsze kroki
Więcej informacji o wdrażaniu kontroli opisanych w tym dokumencie znajdziesz w sekcji Biblioteki i narzędzia.