Testování mobilních aplikací je proces ověřování, že aplikace funguje správně, nepadá a splňuje požadavky. Podle Software Testing Help (2025), automatizované testování snižuje čas regresních kontrol o 70–80% ve srovnání s manuálním testováním. V tomto článku se podíváme na úrovně testování, nástroje pro iOS a Android, TDD a BDD a také CI/CD pro testy.
Hlavní body
Unit testy jsou základem testování mobilních aplikací. Ověřují nejmenší jednotku kódu — jednu funkci, metodu nebo třídu izolovaně od zbytku systému. V mobilním vývoji se unit testy píší v JUnit (Android) a XCTest (iOS). Dobrý unit test musí být rychlý, nezávislý a opakovatelný — neměl by záviset na síti, databázi nebo UI komponentách. Pro izolaci se používají test doubles: mocky, stuby a fakey.
Mockito (Java/Kotlin) a MockK (Kotlin-first) jsou populární knihovny pro vytváření mock objektů na Androidu. Na iOS se používají OCMock, Cuckoo nebo ruční protokoly. Pravidlo: unit testy by měly pokrývat obchodní logiku a datové modely. UI testy by neměly duplikovat unit testy — ověřují interakci uživatele s rozhraním.
Integrační testy ověřují interakci mezi komponentami: repozitář s databází, ViewModel s API službou, navigaci mezi obrazovkami. Na rozdíl od unit testů, integrační testy používají skutečné nebo blízké skutečnosti závislosti (např. databázi v paměti nebo mock server). Robolectric je framework pro spouštění Android testů na JVM bez emulátoru, což urychluje integrační testy 10krát.
Snapshot testy (Golden Tests) jsou speciálním typem integračních testů, které porovnávají vykreslenou UI komponentu s referenčním obrázkem (snapshot). Pokud se vzhled změní, test selže — vývojář vidí, co se změnilo. Facebook SnapshotTestCase (iOS) a Shot (Android) jsou populární nástroje pro snapshot testování.
E2E testy (end-to-end) ověřují kompletní uživatelský scénář od začátku do konce: spuštění aplikace, přihlášení, provedení akce, kontrola výsledku. UI testy jsou podmnožinou E2E zaměřenou na rozhraní. Nástroje: Espresso (Android), XCUITest (iOS), Detox (React Native). E2E testy jsou nejpomalejší, proto se spouštějí samostatně na CI — obvykle v nočních sestaveních.
XCTest je vestavěný framework Apple pro unit testování mobilních aplikací. XCTestRunner spouští testy na simulátoru nebo skutečném zařízení. Testy dědí z XCTestCase, obsahují setUp a tearDown pro přípravu a čištění. XCTest zahrnuje XCTAssert pro aserce (XCTAssertEqual, XCTAssertNil, XCTAssertTrue) a XCTWaiter pro čekání na asynchronní operace.
Příklad jednoduchého XCTest testu: vytvoření modelu User, kontrola správnosti inicializace, formátování jména a výpočtu věku. Code Coverage v Xcode ukazuje, které řádky kódu jsou pokryty testy — cíl pro komerční projekty: alespoň 70–80% pokrytí obchodní logiky. XCTest je integrován s Xcode Server a CI systémy prostřednictvím xcodebuild test.
XCUITest je framework Apple pro UI testování. Funguje prostřednictvím identifikátorů přístupnosti: XCUIElementQuery najde tlačítka, vstupní pole, tabulky podle štítku, identifikátoru nebo typu. XCUITest zaznamenává sekvenci akcí (record/playback) a generuje testovací kód. Důležité: všechny UI prvky musí mít accessibilityIdentifier pro stabilní provoz testů.
JUnit je základní framework pro modulární testování mobilních aplikací v Java/Kotlin. Na Androidu se používá JUnit 4 (poslední stabilní verze 4.13.2) a JUnit 5 pro nové projekty. Mockito je knihovna pro vytváření mock objektů: when(mock.method()).thenReturn(value) — standardní vzor pro izolaci testované třídy od závislostí.
Příklad JUnit testu pro Android:
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
@RunWith(MockitoJUnitRunner.class)
public class LoginViewModelTest {
@Mock
AuthRepository authRepository;
@Test
public void login_emptyEmail_returnsError() {
LoginViewModel vm = new LoginViewModel(authRepository);
String result = vm.login("", "password123");
assertEquals("Email cannot be empty", result);
verify(authRepository, never()).authenticate(any());
}
}
Espresso je framework Google pro UI testy Androidu. Espresso se automaticky synchronizuje s UI vláknem: onView(withId(R.id.button)).perform(click()).check(matches(isDisplayed())). Espresso se snadno píše a je stabilní díky vestavěnému čekání na nečinný stav. UI Automator je framework pro testy mezi aplikacemi, který může interagovat se systémovými prvky (dialogová okna oprávnění, panel oznámení).
Detox je šedo-skříňový E2E framework pro testování React Native mobilních aplikací od Wix. Detox funguje na obou platformách z jediné testovací kódové základny, přičemž interně používá Espresso (Android) a XCUITest (iOS). Detox automaticky čeká, dokud aplikace není nečinná (žádné animace, síťové požadavky, časovače), a teprve poté provede další akci.
Appium je univerzální multiplatformní framework podporující Android, iOS, Web a hybridní aplikace. Appium používá protokol WebDriver a podporuje jakýkoli programovací jazyk (Java, Python, JS, Ruby). Appium Server funguje jako HTTP server, který překládá příkazy do nativních příkazů UI Automator / XCUITest. Hlavní nevýhodou Appium je rychlost: testy běží pomaleji než nativní Espresso nebo XCUITest.
| Kritérium | iOS | Android |
|---|---|---|
| Unit testy | XCTest | JUnit 4/5 + Mockito |
| UI testy | XCUITest | Espresso, UI Automator |
| Snapshot testy | FBSnapshotTestCase | Shot, Roborazzi |
| Automatizace gest | XCUIGesture | UiAutomator touch |
| Pokrytí kódu | Xcode Code Coverage | Jacoco |
| CI integrace | xcodebuild test | Gradle connectedCheck |
TDD je metodika testování mobilních aplikací, při které se test píše před implementačním kódem. Cyklus Red-Green-Refactor: (1) napište test, který selže (Red), (2) napište minimální kód, aby test prošel (Green), (3) refaktorujte kód při zachování průchodu testu. TDD poskytuje 100% pokrytí testy nové funkcionality a čistou architekturu, protože test je první specifikací požadavku.
BDD je rozšíření TDD, kde se testy píší v přirozeném jazyce ve formátu Given-When-Then. Given (kontext) — When (akce) — Then (očekávaný výsledek). BDD testy jsou srozumitelné všem členům týmu: vývojářům, testerům, analytikům a klientům. Mock vs Stub vs Fake: Mock ověřuje interakci (zda byla metoda volána), Stub vrací pevná data, Fake je zjednodušená fungující implementace (např. databáze v paměti). V IT Sectr používáme TDD pro kritickou obchodní logiku a BDD pro akceptační scénáře.
Test Doubles je obecný název pro objekty, které nahrazují skutečné závislosti v testech. Existují čtyři typy: Dummy (objekt pro vyplnění parametrů, nepoužívá se), Stub (vrací dané hodnoty), Spy (zaznamenává volání pro ověření), Mock (předdefinovává očekávaná volání). Porozumění rozdílu je klíčové pro správný návrh testů.
CI/CD — Continuous Integration a Continuous Delivery: praxe automatického sestavování a testování mobilních aplikací při každé změně kódu. V mobilním vývoji CI/CD pipeline zahrnuje: linting, unit testy, integrační testy, sestavení APK/IPA a UI testy. GitHub Actions a Bitrise jsou populární platformy pro mobilní CI/CD. Testy by měly běžet rychle: unit testy za 1–2 minuty, integrační za 5–10, UI testy za 15–30 minut.
Device Farm je farma skutečných zařízení pro testování. Firebase Test Lab (Android) a Xcode Cloud (iOS) poskytují cloudový přístup ke stovkám modelů zařízení. Device Farm odhaluje problémy neviditelné na emulátorech: různé velikosti obrazovek, výkon na starších zařízeních, problémy s kompatibilitou. V IT Sectr pravidelně používáme Firebase Test Lab pro Android a Xcode Cloud pro iOS.
Často kladené otázky
Pro komerční projekty alespoň 70–80% pokrytí obchodní logiky. UI kód je obtížnější pokrýt — stačí 50%. Hlavní není procento, ale kvalita testů: testujte kritické scénáře, okrajové případy a zpracování chyb.
Mock ověřuje interakci — zda byl volán určitý metoda s určitými parametry. Stub vrací předdefinovaná data. Mock kontroluje chování, Stub kontroluje stav.
Ano, ale pouze pro kritické scénáře: přihlášení, registrace, dokončení objednávky, platba. UI testy jsou pomalé a křehké — nepište test pro každou obrazovku. Zaměřte se na E2E scénáře uživatele.
Snapshot Test (Golden Test) porovnává vykreslenou UI komponentu s referenčním obrázkem. Pokud se vzhled změní (písmo, odsazení, barva), test selže — vývojář zkontroluje, zda je změna záměrná. Ideální pro knihovny komponent.
Spouštějte E2E testy paralelně na více zařízeních, používejte Cloud Device Farm a rozdělte testy do nezávislých skupin. Optimalizujte testy: minimalizujte čekání, používejte mocky pro síťové požadavky.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.