Integrační testování v mobilním vývoji — podstata, typy a jak se provádí

Autor: IT Sectr Publikováno: 2026-04-06 Doba čtení: 8 min

Integrační testování ověřuje správnost interakce mezi komponentami mobilní aplikace — moduly, službami, databázemi a externími API. Na rozdíl od jednotkových testů, které izolují každou komponentu, integrační testy odhalují chyby na rozhraních: nekompatibilitu datových formátů, selhání při předávání parametrů a nesprávné zpracování odpovědí ze serveru. Podle údajů Martin Fowler, 2018, integrační testy pokrývají až 40% kritických defektů vynechaných jednotkovými kontrolami a poskytují důvěru ve stabilitu systému před vydáním.

Hlavní body

  • Integrační testování — proces ověřování interakce mezi komponentami systému: databázemi, síťovými službami a interními moduly.
  • Big Bang — přístup, při kterém jsou všechny komponenty propojeny a testovány současně, vhodný pro malé projekty.
  • Bottom-Up — strategie, při které se nejprve testují nízkoúrovňové komponenty, poté se postupně přidávají vyšší.
  • Top-Down — přístup začínající kontrolou rozhraní horní úrovně s použitím stubů pro nižší moduly.
  • MockWebServer — knihovna pro emulaci HTTP serveru v Android testech, umožňující kontrolu síťových požadavků bez reálného backendu.

Co je integrační testování?

Integrační testování — je fáze ověřování softwaru, při které se hodnotí správnost interakce mezi jednotlivými moduly nebo subsystémy aplikace. Zatímco jednotkové testy kontrolují každou komponentu izolovaně, integrační testy tyto komponenty spojují dohromady a ověřují, jak fungují ve spojení. Typické scénáře zahrnují přenos dat mezi síťovou vrstvou a úložištěm, zápis do databáze přes ORM a zpracování odpovědí z API třetích stran.

V kontextu mobilního vývoje integrační testy pokrývají interakci mezi UI vrstvou, obchodní logikou a zdroji dat. Například test může ověřit, že po stisknutí tlačítka „Přihlásit se“ aplikace odešle požadavek na server, obdrží token a uloží jej do lokálního úložiště. Taková kontrola potvrzuje, že řetězec komponent funguje bez selhání.

Podle zprávy World Quality Report 2023 společnosti, které pravidelně aplikují integrační testování, snižují počet produkčních incidentů o 35% ve srovnání s projekty spoléhajícími se pouze na jednotkové testy. To činí integrační kontroly povinným prvkem strategie zajišťování kvality v komerčním vývoji.

Proč je integrační testování v mobilních aplikacích důležité

Mobilní aplikace se skládají z mnoha vzájemně propojených komponent: síťových požadavků, lokálních databází, push notifikací, systémových služeb a SDK třetích stran. Každá z těchto komponent je vyvíjena samostatně, ale za běhu si vyměňují data v reálném čase. Integrační testování odhaluje defekty, které nelze odhalit při izolované kontrole modulů.

Mezi typické problémy odhalené integračními testy patří nesoulad datových typů mezi API a modelem aplikace, chyby serializace JSON, nesprávné zpracování síťových časových limitů a selhání při paralelním přístupu k databázi přes Room nebo Core Data. Bez integračních kontrol se takové defekty dostanou do produkce a projeví se pouze u skutečných uživatelů.

Výzkum Google Testing Blog (2021) ukazuje, že náklady na opravu defektu odhaleného ve fázi integračního testování jsou 5krát nižší než po vydání. Je to proto, že v raných fázích má vývojář úplný kontext chyby a může ji opravit bez urgentního hotfix cyklu. Investice času do psaní integračních testů se vyplácí snížením nákladů na údržbu a zvýšením důvěry uživatelů.

Přístupy k integračnímu testování

Existují tři hlavní přístupy k organizaci integračních testů: Big Bang, Bottom-Up a Top-Down. Volba strategie závisí na velikosti projektu, architektuře aplikace a dostupnosti komponent v době psaní testů. Každý přístup má své výhody a omezení, které je důležité zvážit při plánování testovacího pokrytí.

Big Bang

Big Bang — přístup, při kterém jsou všechny komponenty systému propojeny současně, poté je proveden celkový testovací běh. Tato metoda je jednoduchá na implementaci: nevyžaduje psaní stubů ani emulaci jednotlivých modulů. Při odhalení chyby je však obtížné určit, která komponenta je jejím zdrojem. Big Bang je opodstatněný v malých projektech s jednoduchou architekturou, kde počet modulů nepřesahuje pět.

Bottom-Up

Bottom-Up — strategie, při které integrační testování začíná od nízkoúrovňových komponent: databáze, síťové vrstvy, systémových služeb. Po kontrole každé úrovně testy postupně připojují vyšší moduly — úložiště, Use Case třídy a ViewModel. Hlavní výhodou je včasné odhalení defektů v základních vrstvách aplikace, což snižuje riziko kaskádových chyb v pozdějších fázích vývoje.

Top-Down

Top-Down — přístup, při kterém testování začíná od komponent horní úrovně — UI obrazovek a navigace, zatímco nižší moduly jsou imitovány pomocí stubů nebo mocků. To umožňuje kontrolovat uživatelské scénáře dříve, než je plně implementována serverová část nebo databáze. Top-Down je zvláště užitečný při paralelním vývoji klientské a serverové části, když backend ještě není připraven k reálné integraci.

Nástroje pro integrační testování

Pro integrační testování mobilních aplikací se používá řada specializovaných nástrojů, které se dělí do tří kategorií: knihovny pro emulaci serverů, frameworky pro práci s databázemi a prostředky pro kontrolu systémových služeb. Volba konkrétního nástroje závisí na platformě — Android nebo iOS — a technologickém stacku projektu.

  • MockWebServer — knihovna Square pro Android emulující HTTP server v testovacím prostředí. Umožňuje nastavit očekávané odpovědi, kontrolovat tělo a hlavičky požadavků, simulovat síťové chyby.
  • OHHTTPStubs — knihovna pro iOS zachycující síťové požadavky na úrovni NSURLProtocol a vracející předem připravené odpovědi. Podporuje zpoždění a chyby připojení.
  • Room Testing — vestavěný mechanismus Androidu pro testování databáze: vytvoření in-memory instance Room, provádění operací zápisu a čtení, kontrola migrací a triggerů.
  • Core Data Testing — přístup pro iOS, při kterém se vytvoří in-memory kontejner Core Data, umožňující testovat dotazy, vztahy mezi entitami a ukládání dat bez trvalého úložiště.

Příklady kódu pro integrační testy

Podívejme se na praktické příklady integračních testů pro Android a iOS. Pro platformu Android používáme MockWebServer ve spojení s JUnit, pro iOS — XCTest s knihovnou OHHTTPStubs. Oba příklady kontrolují scénář získání dat z API a jejich uložení v lokálním úložišti.

Android: testování síťové vrstvy s MockWebServer

Tento test ověřuje, že Retrofit požadavek na emulovaný server vrací správný JSON a úložiště převádí odpověď na doménový model. MockWebServer zachycuje požadavek a vrací zadaný JSON, poté test porovná očekávaný výsledek se skutečným.

kotlin
class UserRepositoryTest {
    private val mockServer = MockWebServer()

    @Before
    fun setup() {
        mockServer.start()
    }

    @Test
    fun fetchUser_returnsCorrectData() {
        val json = "{ \`"id\`": 1, \`"name\`": \`"Alice\`" }"
        mockServer.enqueue(MockResponse()
            .setBody(json)
            .setResponseCode(200))

        val repository = UserRepository(
            createRetrofit(mockServer.url("/").toString()))
        val user = repository.fetchUser(1)

        assertEquals(1, user.id)
        assertEquals("Alice", user.name)
    }

    @After
    fun tearDown() {
        mockServer.shutdown()
    }
}

iOS: testování API požadavků s OHHTTPStubs

Pro iOS používá podobný test OHHTTPStubs k zachycení URL požadavků. Knihovna nahrazuje odpověď serveru na úrovni systémového frameworku URL Loading System, což umožňuje testovat libovolnou síťovou knihovnu — URLSession, Alamofire nebo Moya.

swift
import XCTest
import OHHTTPStubs
import OHHTTPStubsSwift

class UserRepositoryTests: XCTestCase {
    func testFetchUser_returnsCorrectData() {
        stub(condition: isPath("/users/1")) { _ in
            return HTTPStubsResponse(
                jsonObject: ["id": 1, "name": "Alice"],
                statusCode: 200,
                headers: nil
            )
        }

        let repository = UserRepository()
        let expectation = expectation(description: "fetch user")

        repository.fetchUser(id: 1) { user in
            XCTAssertEqual(user.id, 1)
            XCTAssertEqual(user.name, "Alice")
            expectation.fulfill()
        }

        waitForExpectations(timeout: 2.0)
    }
}

Nejlepší postupy integračního testování

Efektivní integrační testování vyžaduje dodržování řady postupů, které zvyšují stabilitu testů a snižují náklady na jejich údržbu. Izolujte externí závislosti: používejte in-memory databáze místo produkčních instancí a emulujte externí API pomocí knihoven testovacích stubů. To eliminuje nedeterministická selhání způsobená dostupností sítě nebo stavem externích služeb.

Udržujte nezávislost testů: každý integrační test musí pracovat izolovaně, bez závislosti na výsledcích jiných testů. Používejte anotace @Before a @After v JUnit nebo setUp a tearDown v XCTest pro přípravu a čištění testovacího prostředí. To zabraňuje vzájemnému ovlivňování testů a zjednodušuje diagnostiku chyb.

Pokrývejte okrajové případy: integrační testy by měly kontrolovat nejen úspěšné scénáře (happy path), ale také zpracování chyb — časové limity, HTTP kódy 4xx a 5xx, prázdné odpovědi, poškozený JSON. Podle údajů Google Testing Blog (2022) souvisí 60% produkčních incidentů s nesprávným zpracováním okrajových případů, které nebyly pokryty testy.

Často kladené otázky

Čím se integrační testování liší od jednotkového?

Jednotkové testy kontrolují jednu třídu nebo funkci v izolaci, nahrazují závislosti stuby. Integrační testy kontrolují interakci několika skutečných komponent — například síťové připojení a databázi současně.

Jak dlouho trvá spuštění integračních testů?

Spuštění integračních testů obvykle trvá 2 až 15 minut v závislosti na počtu testů a složitosti prostředí. Pro velké projekty se doporučuje rozdělit testy na paralelní úlohy v CI systému, aby se zkrátil celkový čas kontroly před mergem.

Které komponenty musí být povinně pokryty integračními testy?

V první řadě se integrační testy píší pro síťovou vrstvu, databázi a systémové služby — notifikace, kameru, geolokaci. API požadavky na backend a operace s lokálním úložištěm poskytují nejvyšší ROI, protože tyto komponenty se nejčastěji stávají zdrojem regresí.

Jsou integrační testy potřeba pro jednu obrazovku?

Pro jednu obrazovku stačí jednotkové testy ViewModel a UI testy. Integrační testy pro jednu obrazovku jsou opodstatněné pouze pokud obrazovka interaguje s několika zdroji dat — například kombinuje odpovědi ze dvou různých API nebo zapisuje data současně do sítě a lokální databáze.

Jak často by se měly integrační testy spouštět?

Integrační testy se spouštějí při každém pull requestu v CI pipeline a před hlavními vydáními. Doporučuje se také spouštět celou sadu integračních testů v noci (nightly build), aby se odhalily defekty související se změnami v závislostech nebo testovacím prostředí.

Shrnutí

  • Integrační testování ověřuje interakci mezi komponentami aplikace — síťovou vrstvou, databází a službami.
  • Big Bang je vhodný pro malé projekty, Bottom-Up a Top-Down — pro systémy se složitou architekturou.
  • MockWebServer a OHHTTPStubs jsou hlavní nástroje pro emulaci serveru pro Android a iOS.
  • Integrační testy odhalují až 40% defektů vynechaných jednotkovými testy, podle Martina Fowlera.
  • Izolace závislostí pomocí in-memory databází a stubů zvyšuje stabilitu testů a eliminuje nedeterministická selhání.
  • Náklady na opravu ve fázi integračního testování jsou 5krát nižší než po vstupu defektu do produkce.
  • Zahrňte integrační testy do CI pipeline při každém pull requestu a do nočních běhů pro plné pokrytí.

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

Přečtěte si také