Testování v mobilním vývoji: co to je, jaké typy a jak organizovat

Autor: IT Sectr Publikováno: 2026-03-31 Doba čtení: 9 min

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 ověřují jednotlivé funkce a třídy; integrační testy ověřují interakci modulů; E2E pokrývá kompletní uživatelský scénář.
  • iOS: XCTest pro unit testy, XCUITest pro UI testy. Android: JUnit + Mockito + Espresso.
  • Multiplatformní frameworky: Detox (React Native), Appium (univerzální), XCUITest (iOS).
  • TDD (Test-Driven Development) — nejprve test, poté kód; BDD — scénáře v srozumitelném jazyce.
  • CI/CD: testy se automaticky spouštějí při každém pushi — to je povinný standard pro komerční vývoj.

Úrovně testování: Unit, Integration, E2E

Unit testování

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í testování

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 a UI 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.

Nástroje pro iOS: XCTest a XCUITest

XCTest

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

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ů.

Nástroje pro Android: JUnit, Espresso, Robolectric

JUnit a Mockito

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:

java
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 a UI Automator

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í).

Multiplatformní nástroje: Detox, Appium

Detox pro React Native

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

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.

Srovnání nástrojů pro testování iOS a Android
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 a BDD: metodiky testování

TDD: Test-Driven Development

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: Behaviour-Driven Development

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 a Device Farm

Automatizace testů v CI/CD

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

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

Jaké procento pokrytí testy je považováno za normální?

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.

Čím se liší Mock od Stubu?

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.

Mám psát testy pro UI?

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.

Co je Snapshot Test?

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.

Jak urychlit E2E testy?

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í

  • Unit testy — základ testovací pyramidy: rychlé, izolované, pokrývají obchodní logiku.
  • iOS: XCTest pro unit, XCUITest pro UI. Android: JUnit + Mockito, Espresso pro UI, Robolectric pro rychlé integrační testy.
  • Multiplatformní frameworky: Detox (React Native), Appium (univerzální), XCUITest (iOS-nativní).
  • TDD — test před kódem, BDD — scénáře v obchodním jazyce (Given-When-Then).
  • CI/CD — automatické spouštění testů při každém pushi je povinné pro moderní vývoj.
  • Device Farm — testování na skutečných zařízeních v cloudu pro identifikaci hardwarových problémů.
  • Testovací pyramida: hodně unit, méně integračních, ještě méně E2E — optimální rovnováha mezi rychlostí a pokrytím.

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í.

Prodiskutovat projekt