Mobil tətbiq testi, tətbiqin düzgün işlədiyini, çökmədiyini və tələblərə cavab verdiyini yoxlama prosesidir. Software Testing Help (2025)-ə görə, avtomatlaşdırılmış test əl ilə testlə müqayisədə reqressiya yoxlamalarının vaxtını 70–80% azaldır. Bu məqalədə test səviyyələrini, iOS və Android alətlərini, TDD və BDD-ni, həmçinin testlər üçün CI/CD-ni nəzərdən keçirəcəyik.
Əsas məqamlar
Vahid testləri mobil tətbiq testinin əsasıdır. Onlar kodun ən kiçik vahidini — tək funksiya, metod və ya sinfi sistemin qalan hissəsindən təcrid edərək yoxlayır. Mobil inkişafda vahid testləri JUnit (Android) və XCTest (iOS) ilə yazılır. Yaxşı vahid testi sürətli, müstəqil və təkrarlana bilən olmalıdır — şəbəkədən, verilənlər bazasından və ya UI komponentlərindən asılı olmamalıdır. Təcrid üçün test dublonları istifadə olunur: mock, stub və fake.
Mockito (Java/Kotlin) və MockK (Kotlin-first) Android-də mock obyektləri yaratmaq üçün məşhur kitabxanalardır. iOS-də OCMock, Cuckoo və ya əllə protokollar istifadə olunur. Qayda: vahid testləri biznes məntiqini və verilənlər modellərini əhatə etməlidir. UI testləri vahid testlərini təkrarlamamalıdır — onlar istifadəçinin interfeyslə qarşılıqlı əlaqəsini yoxlayır.
İnteqrasiya testləri komponentlər arasında qarşılıqlı əlaqəni yoxlayır: verilənlər bazası ilə depo, API xidməti ilə ViewModel, ekranlar arasında naviqasiya. Vahid testlərindən fərqli olaraq, inteqrasiya testləri real və ya reala yaxın asılılıqlardan istifadə edir (məsələn, yaddaşdaxili verilənlər bazası və ya mock server). Robolectric emulyator olmadan JVM-də Android testlərini işlətmək üçün çərçivədir, inteqrasiya testlərini 10 dəfə sürətləndirir.
Snapshot testləri (Golden Tests) xüsusi inteqrasiya testi növüdür ki, render edilmiş UI komponentini istinad şəkli (snapshot) ilə müqayisə edir. Görünüş dəyişərsə, test uğursuz olur — tərtibatçı nəyin dəyişdiyini görür. Facebook SnapshotTestCase (iOS) və Shot (Android) snapshot testi üçün məşhur alətlərdir.
E2E testləri (end-to-end) başdan sona tam istifadəçi ssenarisini yoxlayır: tətbiqin işə salınması, giriş, hərəkətin yerinə yetirilməsi, nəticənin yoxlanılması. UI testləri interfeysə yönəlmiş E2E-nin alt çoxluğudur. Alətlər: Espresso (Android), XCUITest (iOS), Detox (React Native). E2E testləri ən yavaşdır, buna görə də CI-da ayrıca işə salınır — adətən gecə qurğularında.
XCTest mobil tətbiqlərin vahid testi üçün Apple-ın daxili çərçivəsidir. XCTestRunner simulyatorda və ya real cihazda testləri işə salır. Testlər XCTestCase-dən miras alır, hazırlıq və təmizlik üçün setUp və tearDown ehtiva edir. XCTest yoxlamalar üçün XCTAssert (XCTAssertEqual, XCTAssertNil, XCTAssertTrue) və asinxron əməliyyatları gözləmək üçün XCTWaiter daxildir.
Sadə XCTest testi nümunəsi: User modeli yaratmaq, başlanğıcın düzgünlüyünü, ad formatlaşdırmasını və yaş hesablamasını yoxlamaq. Code Coverage Xcode-da hansı kod sətirlərinin testlərlə əhatə olunduğunu göstərir — kommersiya layihələri üçün hədəf: biznes məntiqinin ən azı 70–80% əhatəsi. XCTest xcodebuild test vasitəsilə Xcode Server və CI sistemləri ilə inteqrasiya olunur.
XCUITest UI testi üçün Apple-ın çərçivəsidir. Giriş identifikatorları vasitəsilə işləyir: XCUIElementQuery düymələri, giriş sahələrini, cədvəlləri etiket, identifikator və ya növünə görə tapır. XCUITest hərəkətlər ardıcıllığını qeyd edir (record/playback) və test kodu yaradır. Vacib: sabit test işləməsi üçün bütün UI elementlərində accessibilityIdentifier olmalıdır.
JUnit Java/Kotlin-də mobil tətbiqlərin modul testi üçün əsas çərçivədir. Android-də JUnit 4 (son sabit versiya 4.13.2) və yeni layihələr üçün JUnit 5 istifadə olunur. Mockito mock obyektləri yaratmaq üçün kitabxanadır: when(mock.method()).thenReturn(value) — test edilən sinfi asılılıqlardan təcrid etmək üçün standart naxış.
Android üçün JUnit testi nümunəsi:
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 Google-ın Android UI testləri üçün çərçivəsidir. Espresso avtomatik olaraq UI thread ilə sinxronlaşır: onView(withId(R.id.button)).perform(click()).check(matches(isDisplayed())). Espresso daxili boş vəziyyət gözləməsi sayəsində yazmaq asan və sabitdir. UI Automator sistem elementləri (icazə dialoqları, bildiriş pərdəsi) ilə qarşılıqlı əlaqə qura bilən çarpaz tətbiq testləri üçün çərçivədir.
Detox Wix-dən React Native mobil tətbiqlərini test etmək üçün boz qutu E2E çərçivəsidir. Detox daxildə Espresso (Android) və XCUITest (iOS) istifadə edərək tək test kod bazasından hər iki platformada işləyir. Detox tətbiq boşalana qədər (animasiya, şəbəkə sorğuları, taymerlər yox) avtomatik gözləyir və yalnız sonra növbəti hərəkəti yerinə yetirir.
Appium Android, iOS, Web və hibrid tətbiqləri dəstəkləyən universal platformalararası çərçivədir. Appium WebDriver protokolundan istifadə edir və istənilən proqramlaşdırma dilini (Java, Python, JS, Ruby) dəstəkləyir. Appium Server əmrləri yerli UI Automator / XCUITest əmrlərinə tərcümə edən HTTP serveri kimi işləyir. Appium-un əsas çatışmazlığı sürətdir: testlər yerli Espresso və ya XCUITest-dən daha yavaş işləyir.
| Meyar | iOS | Android |
|---|---|---|
| Vahid testləri | XCTest | JUnit 4/5 + Mockito |
| UI testləri | XCUITest | Espresso, UI Automator |
| Snapshot testləri | FBSnapshotTestCase | Shot, Roborazzi |
| İşarə avtomatlaşdırması | XCUIGesture | UiAutomator touch |
| Kod əhatəsi | Xcode Code Coverage | Jacoco |
| CI inteqrasiyası | xcodebuild test | Gradle connectedCheck |
TDD tətbiq kodundan əvvəl testin yazıldığı mobil tətbiq test metodologiyasıdır. Red-Green-Refactor dövrü: (1) uğursuz olan test yazın (Red), (2) testi keçmək üçün minimum kodu yazın (Green), (3) testi keçərli saxlayaraq kodu yenidən qurun. TDD yeni funksionallıq üçün 100% test əhatəsi və təmiz arxitektura təmin edir, çünki test tələbin ilk spesifikasiyasıdır.
BDD TDD-nin genişlənməsidir, burada testlər təbii dildə Given-When-Then formatında yazılır. Given (kontekst) — When (hərəkət) — Then (gözlənilən nəticə). BDD testləri komandanın bütün üzvləri üçün başa düşüləndir: tərtibatçılar, testçilər, analitiklər və müştərilər. Mock vs Stub vs Fake: Mock qarşılıqlı əlaqəni yoxlayır (metodun çağırılıb çağırılmadığı), Stub sabit məlumatları qaytarır, Fake sadələşdirilmiş işlək tətbiqdir (məsələn, yaddaşdaxili DB). IT Sectr-da kritik biznes məntiqi üçün TDD və qəbul ssenariləri üçün BDD istifadə edirik.
Test Dublonları testlərdə real asılılıqları əvəz edən obyektlərin ümumi adıdır. Dörd növü var: Dummy (parametrləri doldurmaq üçün, istifadə olunmur), Stub (verilmiş dəyərləri qaytarır), Spy (yoxlama üçün çağırışları qeyd edir), Mock (gözlənilən çağırışları əvvəlcədən müəyyən edir). Fərqi başa düşmək düzgün test dizaynı üçün çox vacibdir.
CI/CD — Davamlı İnteqrasiya və Davamlı Çatdırılma: hər kod dəyişikliyində mobil tətbiqləri avtomatik qurma və test etmə təcrübəsi. Mobil inkişafda CI/CD boru xətti daxildir: lintinq, vahid testləri, inteqrasiya testləri, APK/IPA qurğusu və UI testləri. GitHub Actions və Bitrise mobil CI/CD üçün məşhur platformalardır. Testlər sürətli işləməlidir: vahid testləri 1–2 dəqiqəyə, inteqrasiya 5–10-a, UI testləri 15–30 dəqiqəyə.
Device Farm test üçün real cihazlar fermasıdır. Firebase Test Lab (Android) və Xcode Cloud (iOS) yüzlərlə cihaz modelinə bulud girişi təmin edir. Device Farm emulyatorlarda görünməyən problemləri üzə çıxarır: müxtəlif ekran ölçüləri, köhnə cihazlarda performans, uyğunluq problemləri. IT Sectr-da müntəzəm olaraq Android üçün Firebase Test Lab və iOS üçün Xcode Cloud istifadə edirik.
Tez-tez verilən suallar
Kommersiya layihələri üçün biznes məntiqinin ən azı 70–80% əhatəsi. UI kodu əhatə etmək daha çətindir — bunun üçün 50% kifayətdir. Əsas məsələ faiz deyil, testlərin keyfiyyətidir: kritik ssenariləri, sərhəd hallarını və səhv idarəetməsini test edin.
Mock qarşılıqlı əlaqəni yoxlayır — müəyyən metodun müəyyən parametrlərlə çağırılıb çağırılmadığını. Stub əvvəlcədən müəyyən edilmiş məlumatları qaytarır. Mock davranışı, Stub vəziyyəti yoxlayır.
Bəli, ancaq yalnız kritik ssenarilər üçün: giriş, qeydiyyat, sifariş tamamlama, ödəniş. UI testləri yavaş və kövrəkdir — hər ekran üçün test yazmayın. İstifadəçinin E2E ssenarilərinə diqqət yetirin.
Snapshot Test (Golden Test) render edilmiş UI komponentini istinad şəkli ilə müqayisə edir. Görünüş dəyişərsə (şrift, dolgu, rəng), test uğursuz olur — tərtibatçı dəyişikliyin qəsdən olub olmadığını yoxlayır. Komponent kitabxanaları üçün idealdır.
E2E testlərini çoxlu cihazda paralel işə salın, Cloud Device Farm istifadə edin və testləri müstəqil qruplara bölün. Testləri optimallaşdırın: gözləmələri minimuma endirin, şəbəkə sorğuları üçün mock istifadə edin.
Xülasə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.