Mobil Geliştirmede Test: Nedir, Hangi Türler ve Nasıl Organize Edilir

Yazar: IT Sectr Yayınlanma: 2026-03-31 Okuma süresi: 9 dk

Mobil uygulama testi, bir uygulamanın doğru çalıştığını, çökmediğini ve gereksinimleri karşıladığını doğrulama sürecidir. Software Testing Help (2025)'e göre, otomatik test, manuel teste kıyasla regresyon kontrollerinin süresini %70–80 oranında azaltır. Bu makalede, test seviyelerini, iOS ve Android araçlarını, TDD ve BDD'yi ve ayrıca testler için CI/CD'yi inceleyeceğiz.

Önemli Noktalar

  • Birim testleri bireysel fonksiyonları ve sınıfları doğrular; entegrasyon testleri modül etkileşimini doğrular; E2E tüm kullanıcı senaryosunu kapsar.
  • iOS: XCTest birim testleri için, XCUITest UI testleri için. Android: JUnit + Mockito + Espresso.
  • Platformlar arası framework'ler: Detox (React Native), Appium (evrensel), XCUITest (iOS).
  • TDD (Test Güdümlü Geliştirme) — önce test, sonra kod; BDD — basit dilde senaryolar.
  • CI/CD: her push'ta testler otomatik olarak çalışır — bu ticari geliştirme için zorunlu bir standarttır.

Test Seviyeleri: Unit, Integration, E2E

Birim Testi

Birim testleri mobil uygulama testinin temelidir. Kodun en küçük birimini — tek bir fonksiyon, yöntem veya sınıfı sistemin geri kalanından izole ederek doğrular. Mobil geliştirmede, birim testleri JUnit (Android) ve XCTest (iOS) ile yazılır. İyi bir birim testi hızlı, bağımsız ve tekrarlanabilir olmalıdır — ağa, veritabanına veya UI bileşenlerine bağımlı olmamalıdır. İzolasyon için test çiftleri kullanılır: mock, stub ve fake.

Mockito (Java/Kotlin) ve MockK (Kotlin öncelikli), Android'de mock nesneleri oluşturmak için popüler kütüphanelerdir. iOS'te OCMock, Cuckoo veya manuel protokoller kullanılır. Kural: birim testleri iş mantığını ve veri modellerini kapsamalıdır. UI testleri birim testlerini tekrarlamamalıdır — bunlar kullanıcının arayüzle etkileşimini doğrular.

Entegrasyon Testi

Entegrasyon testleri bileşenler arasındaki etkileşimi doğrular: veritabanı ile depo, API hizmeti ile ViewModel, ekranlar arası gezinme. Birim testlerinin aksine, entegrasyon testleri gerçek veya gerçeğe yakın bağımlılıklar kullanır (örneğin, bellek içi veritabanı veya mock sunucu). Robolectric, öykünücü olmadan JVM'de Android testlerini çalıştırmak için bir framework'tür ve entegrasyon testlerini 10 kat hızlandırır.

Anlık görüntü testleri (Golden Tests), işlenmiş bir UI bileşenini referans görüntüyle (anlık görüntü) karşılaştıran özel bir entegrasyon testi türüdür. Görünüm değişirse test başarısız olur ve geliştirici neyin değiştiğini görür. Facebook SnapshotTestCase (iOS) ve Shot (Android), anlık görüntü testi için popüler araçlardır.

E2E ve UI Testi

E2E testleri (uçtan uca), baştan sona tüm kullanıcı senaryosunu doğrular: uygulama başlatma, giriş yapma, işlem yapma, sonucu kontrol etme. UI testleri, arayüze odaklanan E2E'nin bir alt kümesidir. Araçlar: Espresso (Android), XCUITest (iOS), Detox (React Native). E2E testleri en yavaş olanlardır, bu nedenle CI'da ayrı olarak çalıştırılırlar — genellikle gece yapılarında.

iOS Araçları: XCTest ve XCUITest

XCTest

XCTest, mobil uygulamaların birim testi için Apple'ın yerleşik framework'üdür. XCTestRunner, simülatörde veya gerçek bir cihazda testleri çalıştırır. Testler XCTestCase'den miras alır, hazırlık ve temizlik için setUp ve tearDown içerir. XCTest, iddialar için XCTAssert (XCTAssertEqual, XCTAssertNil, XCTAssertTrue) ve asenkron işlemleri beklemek için XCTWaiter içerir.

Basit bir XCTest testi örneği: User modeli oluşturma, başlatmanın doğruluğunu, ad biçimlendirmesini ve yaş hesaplamasını doğrulama. Xcode'daki Kod Kapsamı, testlerle hangi kod satırlarının kapsandığını gösterir — ticari projeler için hedef: iş mantığının en az %70–80 kapsamı. XCTest, xcodebuild test aracılığıyla Xcode Server ve CI sistemleriyle entegre olur.

XCUITest

XCUITest, Apple'ın UI testi framework'üdür. Erişilebilirlik tanımlayıcıları aracılığıyla çalışır: XCUIElementQuery, düğmeleri, giriş alanlarını, tabloları etiket, tanımlayıcı veya türe göre bulur. XCUITest bir eylem dizisini kaydeder (kayıt/oynatma) ve test kodu oluşturur. Önemli: kararlı test çalışması için tüm UI öğelerinin bir accessibilityIdentifier'a sahip olması gerekir.

Android Araçları: JUnit, Espresso, Robolectric

JUnit ve Mockito

JUnit, Java/Kotlin'de mobil uygulamaların birim testi için temel framework'tür. Android'de, JUnit 4 (son kararlı sürüm 4.13.2) ve yeni projeler için JUnit 5 kullanılır. Mockito, mock nesneleri oluşturmak için bir kütüphanedir: when(mock.method()).thenReturn(value) — test edilen sınıfı bağımlılıklardan ayırmak için standart bir kalıp.

Android için JUnit testi örneği:

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 ve UI Automator

Espresso, Google'ın Android UI testleri için framework'üdür. Espresso otomatik olarak UI iş parçacığıyla senkronize olur: onView(withId(R.id.button)).perform(click()).check(matches(isDisplayed())). Espresso, yerleşik boşta bekleme sayesinde yazması kolay ve kararlıdır. UI Automator, sistem öğeleriyle (izin diyalogları, bildirim gölgesi) etkileşime girebilen uygulamalar arası testler için bir framework'tür.

Platformlar Arası Araçlar: Detox, Appium

React Native için Detox

Detox, Wix'ten React Native mobil uygulamalarını test etmek için gri kutu E2E framework'üdür. Detox, içte Espresso (Android) ve XCUITest (iOS) kullanarak tek bir test kod tabanından her iki platformda da çalışır. Detox, uygulama boşta kalana (animasyon, ağ isteği, zamanlayıcı yok) kadar otomatik olarak bekler ve ancak o zaman sonraki eylemi gerçekleştirir.

Appium

Appium, Android, iOS, Web ve hibrit uygulamaları destekleyen evrensel bir platformlar arası framework'tür. Appium, WebDriver protokolünü kullanır ve herhangi bir programlama dilini (Java, Python, JS, Ruby) destekler. Appium Server, komutları yerel UI Automator / XCUITest komutlarına çeviren bir HTTP sunucusu olarak çalışır. Appium'un ana dezavantajı hızdır: testler yerel Espresso veya XCUITest'ten daha yavaş çalışır.

iOS ve Android test araçları karşılaştırması
Kriter iOS Android
Birim testleri XCTest JUnit 4/5 + Mockito
UI testleri XCUITest Espresso, UI Automator
Anlık görüntü testleri FBSnapshotTestCase Shot, Roborazzi
Hareket otomasyonu XCUIGesture UiAutomator touch
Kod kapsamı Xcode Code Coverage Jacoco
CI entegrasyonu xcodebuild test Gradle connectedCheck

TDD ve BDD: Test Metodolojileri

TDD: Test Güdümlü Geliştirme

TDD, uygulama kodundan önce testin yazıldığı bir mobil uygulama test metodolojisidir. Red-Green-Refactor döngüsü: (1) başarısız olan bir test yazın (Red), (2) testi geçmek için minimum kodu yazın (Green), (3) testi geçer durumda tutarak kodu yeniden düzenleyin. TDD, yeni işlevsellik için %100 test kapsamı ve temiz bir mimari sağlar çünkü test, gereksinimin ilk şartnamesidir.

BDD: Davranış Güdümlü Geliştirme

BDD, testlerin doğal dilde Given-When-Then formatında yazıldığı TDD'nin bir uzantısıdır. Given (bağlam) — When (eylem) — Then (beklenen sonuç). BDD testleri, ekip üyelerinin tümü tarafından anlaşılabilir: geliştiriciler, test uzmanları, analistler ve müşteriler. Mock vs Stub vs Fake: Mock etkileşimi doğrular (yöntemin çağrılıp çağrılmadığı), Stub sabit veri döndürür, Fake basitleştirilmiş çalışan bir uygulamadır (örneğin, bellek içi DB). IT Sectr'da, kritik iş mantığı için TDD ve kabul senaryoları için BDD kullanıyoruz.

Test Çiftleri, testlerde gerçek bağımlılıkların yerini alan nesnelerin genel adıdır. Dört türü vardır: Dummy (parametreleri doldurmak için, kullanılmaz), Stub (belirtilen değerleri döndürür), Spy (doğrulama için çağrıları kaydeder), Mock (beklenen çağrıları önceden tanımlar). Farkı anlamak, doğru test tasarımı için kritik öneme sahiptir.

CI/CD ve Device Farm

CI/CD'de Test Otomasyonu

CI/CD — Sürekli Entegrasyon ve Sürekli Teslimat: her kod değişikliğinde mobil uygulamaları otomatik olarak derleme ve test etme pratiği. Mobil geliştirmede, CI/CD boru hattı şunları içerir: linting, birim testleri, entegrasyon testleri, APK/IPA derlemesi ve UI testleri. GitHub Actions ve Bitrise, mobil CI/CD için popüler platformlardır. Testler hızlı çalışmalıdır: birim testleri 1–2 dakikada, entegrasyon testleri 5–10'da, UI testleri 15–30 dakikada.

Device Farm

Device Farm, testler için gerçek cihazlardan oluşan bir çiftliktir. Firebase Test Lab (Android) ve Xcode Cloud (iOS), yüzlerce cihaz modeline bulut erişimi sağlar. Device Farm, öykünücülerde görünmeyen sorunları ortaya çıkarır: farklı ekran boyutları, eski cihazlarda performans, uyumluluk sorunları. IT Sectr'da, düzenli olarak Android için Firebase Test Lab ve iOS için Xcode Cloud kullanıyoruz.

Sıkça Sorulan Sorular

Test kapsamının yüzde kaçı normal kabul edilir?

Ticari projeler için iş mantığının en az %70–80 kapsamı. UI kodunu kapsamak daha zordur — %50 yeterlidir. Önemli olan yüzde değil testlerin kalitesidir: kritik senaryoları, sınır durumlarını ve hata yönetimini test edin.

Mock, Stub'dan nasıl farklıdır?

Mock etkileşimi doğrular — belirli bir yöntemin belirli parametrelerle çağrılıp çağrılmadığını. Stub önceden tanımlanmış verileri döndürür. Mock davranışı, Stub durumu kontrol eder.

UI için test yazmalı mıyım?

Evet, ancak yalnızca kritik senaryolar için: giriş, kayıt, sipariş tamamlama, ödeme. UI testleri yavaş ve kırılgandır — her ekran için test yazmayın. Kullanıcının E2E senaryolarına odaklanın.

Anlık Görüntü Testi nedir?

Anlık Görüntü Testi (Golden Test), işlenmiş bir UI bileşenini referans görüntüyle karşılaştırır. Görünüm değişirse (yazı tipi, dolgu, renk), test başarısız olur — geliştirici değişikliğin kasıtlı olup olmadığını kontrol eder. Bileşen kitaplıkları için idealdir.

E2E testleri nasıl hızlandırılır?

E2E testlerini birden çok cihazda paralel olarak çalıştırın, Cloud Device Farm kullanın ve testleri bağımsız gruplara ayırın. Testleri optimize edin: beklemeleri en aza indirin, ağ istekleri için mock kullanın.

Özet

  • Birim testleri — test piramidinin temeli: hızlı, izole, iş mantığını kapsar.
  • iOS: birim için XCTest, UI için XCUITest. Android: JUnit + Mockito, UI için Espresso, hızlı entegrasyon testleri için Robolectric.
  • Platformlar arası framework'ler: Detox (React Native), Appium (evrensel), XCUITest (iOS-yerel).
  • TDD — koddan önce test, BDD — iş dilinde senaryolar (Given-When-Then).
  • CI/CD — her push'ta otomatik test çalıştırma modern geliştirme için zorunludur.
  • Device Farm — donanım sorunlarını belirlemek için bulutta gerçek cihazlarda test.
  • Test piramidi: çok birim, daha az entegrasyon, daha da az E2E — hız ve kapsamın optimal dengesi.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış