Testiranje mobilnih aplikacija je proces provere da aplikacija radi ispravno, ne pada i ispunjava zahteve. Prema Software Testing Help (2025), automatizovano testiranje smanjuje vreme regresionih provera za 70–80% u poređenju sa ručnim testiranjem. U ovom članku ćemo obraditi nivoe testiranja, alate za iOS i Android, TDD i BDD, kao i CI/CD za testove.
Glavno
Unit testovi su osnova testiranja mobilnih aplikacija. Oni proveravaju najmanju jedinicu koda — jednu funkciju, metod ili klasu u izolaciji od ostatka sistema. U mobilnom razvoju, unit testovi se pišu u JUnit (Android) i XCTest (iOS). Dobar unit test mora biti brz, nezavisan i ponovljiv — ne sme zavisiti od mreže, baze podataka ili UI komponenti. Za izolaciju se koriste test doubles: mock-ovi, stub-ovi i fake-ovi.
Mockito (Java/Kotlin) i MockK (Kotlin-first) su popularne biblioteke za kreiranje mock objekata na Androidu. Na iOS-u se koriste OCMock, Cuckoo ili ručni protokoli. Pravilo: unit testovi treba da pokrivaju poslovnu logiku i modele podataka. UI testovi ne treba da dupliraju unit testove — oni proveravaju interakciju korisnika sa interfejsom.
Integracioni testovi proveravaju interakciju između komponenti: repozitorijum sa bazom podataka, ViewModel sa API servisom, navigaciju između ekrana. Za razliku od unit testova, integracioni testovi koriste stvarne ili približne stvarnosti zavisnosti (npr. baza podataka u memoriji ili mock server). Robolectric je okvir za pokretanje Android testova na JVM bez emulatora, što ubrzava integracione testove 10 puta.
Snapshot testovi (Golden Tests) su posebna vrsta integracionih testova koji upoređuju renderovani UI komponentu sa referentnom slikom (snapshot). Ako se izgled promeni, test pada — programer vidi šta se promenilo. Facebook SnapshotTestCase (iOS) i Shot (Android) su popularni alati za snapshot testiranje.
E2E testovi (end-to-end) proveravaju kompletan korisnički scenario od početka do kraja: pokretanje aplikacije, prijava, izvršenje akcije, provera rezultata. UI testovi su podskup E2E fokusiran na interfejs. Alati: Espresso (Android), XCUITest (iOS), Detox (React Native). E2E testovi su najsporiji, zato se pokreću odvojeno na CI — obično na noćnim buildovima.
XCTest je Apple-ov ugrađeni okvir za unit testiranje mobilnih aplikacija. XCTestRunner pokreće testove na simulatoru ili stvarnom uređaju. Testovi nasleđuju XCTestCase, sadrže setUp i tearDown za pripremu i čišćenje. XCTest uključuje XCTAssert za provere (XCTAssertEqual, XCTAssertNil, XCTAssertTrue) i XCTWaiter za čekanje asinhronih operacija.
Primer jednostavnog XCTest testa: kreiranje modela User, provera ispravnosti inicijalizacije, formatiranja imena i izračunavanja godina. Code Coverage u Xcode-u pokazuje koji redovi koda su pokriveni testovima — cilj za komercijalne projekte: najmanje 70–80% pokrivenosti poslovne logike. XCTest je integrisan sa Xcode Server-om i CI sistemima putem xcodebuild test.
XCUITest je Apple-ov okvir za UI testiranje. Radi putem accessibility identifikatora: XCUIElementQuery pronalazi dugmad, polja za unos, tabele po label, identifier ili tipu. XCUITest snima sekvencu akcija (record/playback) i generiše test kod. Važno: svi UI elementi moraju imati accessibilityIdentifier za stabilan rad testova.
JUnit je osnovni okvir za modularno testiranje mobilnih aplikacija na Java/Kotlin. Na Android-u se koristi JUnit 4 (poslednja stabilna verzija 4.13.2) i JUnit 5 za nove projekte. Mockito je biblioteka za kreiranje mock objekata: when(mock.method()).thenReturn(value) — standardni obrazac za izolaciju testirane klase od zavisnosti.
Primer JUnit testa za 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 Google-ov okvir za UI testove na Android-u. Espresso se automatski sinhronizuje sa UI niti: onView(withId(R.id.button)).perform(click()).check(matches(isDisplayed())). Espresso je jednostavan za pisanje i stabilan zahvaljujući ugrađenom čekanju idle stanja. UI Automator je okvir za testove između aplikacija koji može da interaguje sa sistemskim elementima (dijalozi dozvola, senka obaveštenja).
Detox je sivo-sivi E2E okvir za testiranje React Native mobilnih aplikacija od Wix-a. Detox radi na obe platforme iz jedne test koda, koristeći Espresso (Android) i XCUITest (iOS) ispod haube. Detox automatski čeka da aplikacija postane idle (bez animacija, mrežnih zahteva, tajmera) i tek onda izvršava sledeću akciju.
Appium je univerzalni višeplatformski okvir koji podržava Android, iOS, Web i hibridne aplikacije. Appium koristi WebDriver protokol i podržava bilo koji programski jezik (Java, Python, JS, Ruby). Appium Server radi kao HTTP server koji prevodi komande u native UI Automator / XCUITest komande. Glavni nedostatak Appium-a je brzina: testovi se izvršavaju sporije od native Espresso ili XCUITest.
| Kriterijum | iOS | Android |
|---|---|---|
| Unit testovi | XCTest | JUnit 4/5 + Mockito |
| UI testovi | XCUITest | Espresso, UI Automator |
| Snapshot testovi | FBSnapshotTestCase | Shot, Roborazzi |
| Automatizacija pokreta | XCUIGesture | UiAutomator touch |
| Code Coverage | Xcode Code Coverage | Jacoco |
| CI integracija | xcodebuild test | Gradle connectedCheck |
TDD je metodologija testiranja mobilnih aplikacija u kojoj se test piše pre implementacije koda. Ciklus Red-Green-Refactor: (1) napisati test koji ne prolazi (Red), (2) napisati minimalni kod da test prođe (Green), (3) refaktorisati kod uz očuvanje prolaska testa. TDD daje 100% pokrivenost testovima nove funkcionalnosti i čistu arhitekturu, jer je test prva specifikacija zahteva.
BDD je proširenje TDD-a gde se testovi pišu na prirodnom jeziku u formatu Given-When-Then. Given (kontekst) — When (akcija) — Then (očekivani rezultat). BDD testovi su razumljivi svim članovima tima: programerima, testerima, analitičarima i klijentima. Mock vs Stub vs Fake: Mock proverava interakciju (da li je metod pozvan), Stub vraća fiksne podatke, Fake je pojednostavljena radna implementacija (npr. baza u memoriji). U IT Sectr-u koristimo TDD za kritičnu poslovnu logiku i BDD za prijemne scenarije.
Test Doubles je opšti naziv za objekte koji zamenjuju stvarne zavisnosti u testovima. Postoje četiri tipa: Dummy (objekat za popunjavanje parametara, ne koristi se), Stub (vraća zadate vrednosti), Spy (beleži pozive radi provere), Mock (unapred definiše očekivane pozive). Razumevanje razlike je ključno za pravilno dizajniranje testova.
CI/CD — Continuous Integration i Continuous Delivery: praksa automatskog buildovanja i testiranja mobilnih aplikacija pri svakoj promeni koda. U mobilnom razvoju, CI/CD pipeline uključuje: linting, unit testove, integracione testove, build APK/IPA i UI testove. GitHub Actions i Bitrise su popularne platforme za mobilni CI/CD. Testovi treba da se izvršavaju brzo: unit testovi za 1–2 minuta, integracioni za 5–10, UI testovi za 15–30 minuta.
Device Farm je farma stvarnih uređaja za testiranje. Firebase Test Lab (Android) i Xcode Cloud (iOS) pružaju cloud pristup stotinama modela uređaja. Device Farm otkriva probleme koji nisu vidljivi na emulatorima: osobine ekrana različitih veličina, performanse na starim uređajima, problemi sa kompatibilnošću. U IT Sectr-u redovno koristimo Firebase Test Lab za Android i Xcode Cloud za iOS.
Često postavljana pitanja
Za komercijalne projekte najmanje 70–80% pokrivenosti poslovne logike. UI kod je teže pokriti — za njega je dovoljno 50%. Glavno nije procenat, već kvalitet testova: testirajte kritične scenarije, granične slučajeve i obradu grešaka.
Mock proverava interakciju — da li je određeni metod pozvan sa određenim parametrima. Stub vraća unapred zadate podatke. Mock proverava ponašanje, Stub — stanje.
Da, ali samo za kritične scenarije: prijava, registracija, poručivanje, plaćanje. UI testovi su spori i lomljivi — ne pišite test za svaki ekran. Fokusirajte se na E2E scenarije korisnika.
Snapshot Test (Golden Test) poredi renderovani UI komponentu sa referentnom slikom. Ako se izgled promeni (font, razmak, boja), test pada — programer proverava da li je promena namerna. Idealno za biblioteke komponenti.
Pokrećite E2E testove paralelno na više uređaja, koristite Cloud Device Farm i delite testove u nezavisne grupe. Optimizujte testove: minimizirajte čekanja, koristite mock-ove za mrežne zahteve.
Zaključak
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.