Testowanie różnych rozmiarów ekranu i okien

Testowanie jest nieodłączną częścią procesu tworzenia aplikacji. Zwykle uruchamiasz aplikacje w emulatorze lub na 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 niemożliwe do zarządzania w przypadku aplikacji działających na ekranach i urządzeniach o różnych rozmiarach. Problemy związane z testowaniem ręcznym są najczęściej wynikiem używania do programowania na jednym urządzeniu. Dlatego na urządzeniach o innych formatach mogą one być niezauważone.

Aby wykryć regresje w przypadku różnych rozmiarów okien i ekranów, zaimplementuj automatyczne testy, które pozwolą sprawdzić, czy działanie i wygląd aplikacji są spójne na różnych urządzeniach. Testy automatyczne wykrywają problemy na wczesnym etapie, minimalizując ryzyko, które wpływa na wygodę użytkowników.

Co testować

Opracowując UI pod kątem ekranów o różnych rozmiarach i wielkości okien, zwróć szczególną uwagę na 2 aspekty:

  1. czym różnią się wizualne atrybuty komponentów i układów w oknach o różnych rozmiarach,
  2. Jak zachowywany jest stan po zmianach konfiguracji

Atrybuty wizualne

Niezależnie od tego, czy dostosowujesz interfejsy do różnych rozmiarów okien, zadbaj o to, by wyświetlały się prawidłowo. Bierz pod uwagę szerokości i wysokości, które są kompaktowe, średnie i rozszerzone. Informacje o zalecanych punktach przerwania znajdziesz w sekcji Klasy rozmiaru okna.

Rysunek 1. Ekran „Dla Ciebie” w sekcji Teraz na Androidzie w różnych rozmiarach okien

Poza tym aplikacja może nie renderować niektórych komponentów w systemie projektowania zgodnie z oczekiwaniami, gdy ich ograniczenia rozmiaru są rozciągnięte.

Jeśli Twoja aplikacja ma układy adaptacyjne przeznaczone na okna o różnych rozmiarach, musisz przeprowadzić automatyczne testy, aby zapobiec regresjom. Na przykład poprawienie marginesu na telefonie może powodować niespójności w układzie na tablecie. Twórz testy interfejsu, aby weryfikować działanie układów i komponentów, lub przeprowadzaj testy zrzutów ekranu, aby wizualnie sprawdzać układy.

Przywracanie stanu

Aplikacje działające na urządzeniach takich jak tablety są obracane i zmieniane znacznie częściej niż aplikacje na telefonach. Urządzenia składane oferują też nowe możliwości wyświetlacza, np. składanie i otwieranie, co może powodować zmiany konfiguracji. Aplikacja musi mieć możliwość przywrócenia stanu po wystąpieniu tych zmian w konfiguracji. Następnie musisz też napisać testy, które potwierdzi, że aplikacja działa prawidłowo.

Rysunek 2. Urządzenie składane (złożone, otwarte z płaskim ekranem, otwarte z płaskim ekranem, obrócone do orientacji poziomej) oraz do połowy otwarte (na tablecie).

Najpierw sprawdź, czy aplikacja nie ulega awarii po zmianie konfiguracji. Dopilnuj, aby każdy interfejs w Twojej aplikacji poradził sobie z dowolną kombinacją obracania, zmiany rozmiaru i zwijania. Zmiany w konfiguracji domyślnie odtwarzają aktywność, dlatego niektóre awarie mają miejsce ze względu na założenia dotyczące trwałości działania.

Zmiany konfiguracji można testować na wiele sposobów, ale w większości przypadków można to zrobić na 2 sposoby:

  • W funkcji tworzenia wiadomości użyj StateRestorationTester, aby wydajnie przeprowadzić symulację zmiany konfiguracji bez ponownego uruchamiania aktywności. Więcej informacji znajdziesz w sekcjach poniżej.
  • W dowolnym teście interfejsu, takim jak Espresso lub Compose, możesz symulować zmianę konfiguracji, wywołując funkcję Activity.recreate().

Nie musisz zwykle używać różnych urządzeń do testowania przywracania stanu w odpowiedzi na zmiany w konfiguracji. To dlatego, że wszystkie zmiany w konfiguracji, które odtwarzają tę aktywność, mają podobne konsekwencje. Niektóre zmiany w konfiguracji mogą jednak aktywować inne mechanizmy przywracania stanu na określonych urządzeniach.

Gdy na przykład użytkownik przegląda interfejs z szczegółami listy na otwartym składanym urządzeniu, który składa urządzenie, aby przełączyć się na przedni wyświetlacz, zwykle wyświetla się strona z informacjami. Przywrócenie stanu interfejsu użytkownika, w tym stanu nawigacji, powinno zostać przeprowadzone podczas testu automatycznego.

Jeśli chcesz przetestować zmiany konfiguracji zachodzące na urządzeniach przechodzących z jednego wyświetlacza na drugi lub w trybie wielu okien, masz do wyboru kilka opcji:

  • Podczas testu zmień rozmiar ekranu na dowolnym urządzeniu. W większości przypadków aktywuje to wszystkie mechanizmy przywracania stanu, które musisz zweryfikować. Ten test nie zadziała jednak w przypadku logiki, która wykrywa określone stany urządzeń składanych, ponieważ zmiany stanu nie wywołują zmiany konfiguracji.
  • Za pomocą urządzenia lub emulatora obsługującego funkcje, które chcesz przetestować, wywołaj powiązane zmiany w 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 otwartego płasko w poziomie. Przykłady znajdziesz w sekcji Urządzenie do espresso w artykule Biblioteki i narzędzia do testowania różnych rozmiarów ekranu.
Rysunek 3. Składanie i otwieranie urządzenia.

Rodzaje testów pod kątem różnych rozmiarów ekranu i okna

W każdym przypadku użycia użyj odpowiedniego typu testu, aby sprawdzić, czy test działa prawidłowo na różnych urządzeniach:

  • Testy zachowania interfejsu uruchamiają niektóre elementy 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żytkowników. W przypadku widoków użyj Espresso. Jetpack Compose ma własne interfejsy API do testowania. Testy zachowania interfejsu mogą być instrumentowane lub lokalne. Testy instrumentalne są przeprowadzane na urządzeniach lub emulatorach, a lokalne testy interfejsu – na Robolectric na JVM.

    Skorzystaj z testów zachowania interfejsu, by sprawdzić, czy poprawnie zaimplementowano nawigację w aplikacji. Testy wykonują takie działania jak kliknięcia i przesunięcia. Testy zachowania interfejsu sprawdzają także istnienie określonych elementów lub właściwości. Więcej informacji znajdziesz w artykule Automatyzacja testów interfejsu.

  • Testy zrzutu ekranu pozwalają wykonać zrzut ekranu interfejsu lub komponentu i porównać go z wcześniej 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. Zrzut ekranu można wykonać za pomocą JVM lub urządzeń. Dostępnych jest wiele narzędzi do testowania 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 mniej powszechne.

Dalsze kroki

Więcej informacji o sposobie wdrażania mechanizmów kontroli zawartych w tym dokumencie znajdziesz w artykule Biblioteki i narzędzia.