Mobil İnkişafda Test: nədir, hansı növlər və necə təşkil edilir

Müəllif: IT Sectr Dərc olunub: 2026-03-31 Oxuma vaxtı: 9 dəq

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 ayrı-ayrı funksiyaları və sinifləri yoxlayır; inteqrasiya testləri modul qarşılıqlı əlaqəsini yoxlayır; E2E tam istifadəçi ssenarisini əhatə edir.
  • iOS: XCTest vahid testləri üçün, XCUITest UI testləri üçün. Android: JUnit + Mockito + Espresso.
  • Platformalararası çərçivələr: Detox (React Native), Appium (universal), XCUITest (iOS).
  • TDD (Test-Driven Development) — əvvəlcə test, sonra kod; BDD — sadə dildə ssenarilər.
  • CI/CD: hər push-da testlər avtomatik işə düşür — bu kommersiya inkişafı üçün məcburi standartdır.

Test səviyyələri: Unit, Integration, E2E

Vahid testi

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 testi

İ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 və UI testi

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.

iOS Alətləri: XCTest və XCUITest

XCTest

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

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.

Android Alətləri: JUnit, Espresso, Robolectric

JUnit və Mockito

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:

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 və UI Automator

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.

Platformalararası Alətlər: Detox, Appium

React Native üçün Detox

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

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.

iOS və Android test alətlərinin müqayisəsi
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 və BDD: Test Metodologiyaları

TDD: Test-Driven Development

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

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 və Device Farm

CI/CD-də Test Avtomatlaşdırması

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

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

Test əhatəsinin neçə faizi normal sayılır?

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 Stub-dan nə ilə fərqlənir?

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.

UI üçün test yazmalıyam?

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 nədir?

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 necə sürətləndirmək olar?

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ə

  • Vahid testləri — test piramidasının əsası: sürətli, təcrid olunmuş, biznes məntiqini əhatə edir.
  • iOS: vahid üçün XCTest, UI üçün XCUITest. Android: JUnit + Mockito, UI üçün Espresso, sürətli inteqrasiya testləri üçün Robolectric.
  • Platformalararası çərçivələr: Detox (React Native), Appium (universal), XCUITest (iOS-yerli).
  • TDD — koddan əvvəl test, BDD — biznes dilində ssenarilər (Given-When-Then).
  • CI/CD — hər push-da avtomatik test icrası müasir inkişaf üçün məcburidir.
  • Device Farm — aparat problemlərini müəyyən etmək üçün buludda real cihazlarda test.
  • Test piramidası: çox vahid, az inteqrasiya, daha az E2E — sürət və əhatənin optimal balansı.

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.

Layihəni müzakirə et