Mobil geliştirmede entegrasyon testi — nedir, türleri ve nasıl yapılır

Yazar: IT Sectr Yayınlanma: 2026-04-06 Okuma süresi: 8 dk

Entegrasyon testi, mobil uygulama bileşenleri — modüller, hizmetler, veritabanları ve harici API’ler — arasındaki etkileşimin doğruluğunu kontrol eder. Her bir bileşeni izole eden birim testlerinin aksine, entegrasyon testleri birleşim noktalarındaki hataları tespit eder: veri formatı uyumsuzluğu, parametre iletim hataları ve sunucu yanıtlarının hatalı işlenmesi. Martin Fowler, 2018’e göre, entegrasyon testleri birim testlerinin kaçırdığı kritik kusurların %40’ına kadarını kapsar ve sürüm öncesinde sistem kararlılığı konusunda güven sağlar.

Önemli noktalar

  • Entegrasyon testi — sistem bileşenleri arasındaki etkileşimin doğrulanması süreci: veritabanları, ağ hizmetleri ve iç modüller.
  • Big Bang — tüm bileşenlerin aynı anda bağlanıp test edildiği, küçük projeler için uygun bir yaklaşım.
  • Bottom-Up — önce düşük seviyeli bileşenlerin test edildiği, ardından kademeli olarak üst seviye bileşenlerin eklendiği bir strateji.
  • Top-Down — alt seviye modüller için stub’lar kullanarak üst seviye arayüzlerin doğrulanmasıyla başlayan bir yaklaşım.
  • MockWebServer — Android testlerinde HTTP sunucusunu taklit eden, gerçek bir backend olmadan ağ isteklerini doğrulamaya olanak tanıyan bir kütüphane.

Entegrasyon testi nedir?

Entegrasyon testi, bir uygulamanın ayrı modülleri veya alt sistemleri arasındaki etkileşimin doğruluğunu değerlendiren bir yazılım doğrulama aşamasıdır. Birim testleri her bir bileşeni ayrı ayrı kontrol ederken, entegrasyon testleri bu bileşenleri bir araya getirir ve birlikte nasıl çalıştıklarını kontrol eder. Tipik senaryolar arasında ağ katmanı ile depo arasında veri aktarımı, ORM aracılığıyla veritabanına yazma ve üçüncü taraf API’lerden gelen yanıtların işlenmesi yer alır.

Mobil geliştirme bağlamında, entegrasyon testleri UI katmanı, iş mantığı ve veri kaynakları arasındaki etkileşimleri kapsar. Örneğin, bir test "Giriş Yap" düğmesine tıklandıktan sonra uygulamanın sunucuya bir istek gönderdiğini, bir token aldığını ve yerel depolama alanına kaydettiğini doğrulayabilir. Böyle bir doğrulama, bileşen zincirinin hatasız çalıştığını teyit eder.

World Quality Report 2023’e göre, entegrasyon testlerini düzenli olarak uygulayan şirketler, yalnızca birim testlerine güvenen projelere kıyasla üretim olaylarını %35 oranında azaltır. Bu, entegrasyon kontrollerini ticari geliştirmede kalite güvence stratejisinin zorunlu bir unsuru haline getirir.

Mobil uygulamalarda entegrasyon testi neden önemlidir

Mobil uygulamalar birbirine bağlı birçok bileşenden oluşur: ağ istekleri, yerel veritabanları, push bildirimleri, sistem hizmetleri ve üçüncü taraf SDK’lar. Bu bileşenlerin her biri ayrı ayrı geliştirilir, ancak çalışma zamanında gerçek zamanlı olarak veri alışverişinde bulunurlar. Entegrasyon testleri, izole modül doğrulamasıyla bulunamayan kusurları tespit eder.

Entegrasyon testleri tarafından keşfedilen tipik sorunlar arasında API ile uygulama modeli arasında veri türü uyuşmazlığı, JSON serileştirme hataları, ağ zaman aşımlarının hatalı işlenmesi ve Room veya Core Data aracılığıyla eşzamanlı veritabanı erişimi sırasındaki hatalar yer alır. Entegrasyon kontrolleri olmadan, bu tür kusurlar üretime ulaşır ve yalnızca gerçek kullanıcılarda ortaya çıkar.

Google Testing Blog (2021) araştırması, entegrasyon testleri sırasında bulunan bir kusurun düzeltme maliyetinin sürümden sonraya göre 5 kat daha düşük olduğunu göstermektedir. Bunun nedeni, erken aşamalarda geliştiricinin hatanın tam bağlamına sahip olması ve acil bir hotfix döngüsü olmadan düzeltebilmesidir. Entegrasyon testleri yazmaya zaman ayırmak, bakım maliyetlerinin azalması ve kullanıcı güveninin artmasıyla kendini amorti eder.

Entegrasyon testi yaklaşımları

Entegrasyon testlerini organize etmek için üç ana yaklaşım vardır: Big Bang, Bottom-Up ve Top-Down. Strateji seçimi proje büyüklüğüne, uygulama mimarisine ve testlerin yazıldığı sırada bileşenlerin kullanılabilirliğine bağlıdır. Her yaklaşımın, test kapsamını planlarken dikkate alınması gereken avantajları ve sınırlamaları vardır.

Big Bang

Big Bang — sistemin tüm bileşenlerinin aynı anda bağlandığı ve ardından genel bir test çalıştırmasının yapıldığı yaklaşım. Bu yöntem uygulaması basittir: stub yazmaya veya tek tek modülleri taklit etmeye gerek yoktur. Ancak bir hata tespit edildiğinde, hangi bileşenin buna neden olduğunu belirlemek zordur. Big Bang, modül sayısının beşi geçmediği basit mimariye sahip küçük projelerde haklıdır.

Bottom-Up

Bottom-Up — entegrasyon testlerinin düşük seviyeli bileşenlerle başladığı strateji: veritabanı, ağ katmanı, sistem hizmetleri. Her seviyeyi doğruladıktan sonra, testler kademeli olarak üst seviye modülleri — depolar, Use Case sınıfları ve ViewModel’leri — bağlar. Ana avantaj, uygulamanın temel katmanlarındaki kusurların erken tespitidir, bu da geliştirmenin sonraki aşamalarında zincirleme hata riskini azaltır.

Top-Down

Top-Down — testlerin üst seviye bileşenlerle — UI ekranları ve navigasyon — başladığı, alt seviye modüllerin stub veya mock’lar kullanılarak simüle edildiği yaklaşım. Bu, sunucu tarafı veya veritabanı tamamen uygulanmadan önce kullanıcı senaryolarının kontrol edilmesini sağlar. Top-Down, backend’in henüz gerçek entegrasyona hazır olmadığı durumlarda istemci ve sunucu parçalarının paralel geliştirilmesi sırasında özellikle kullanışlıdır.

Entegrasyon testi araçları

Mobil uygulamaların entegrasyon testleri için, üç kategoriye ayrılan bir dizi özel araç kullanılır: sunucu taklit kütüphaneleri, veritabanı framework’leri ve sistem hizmeti doğrulama araçları. Belirli bir aracın seçimi platforma — Android veya iOS — ve projenin teknoloji yığına bağlıdır.

  • MockWebServer — Square’in Android için kütüphanesi, test ortamında bir HTTP sunucusunu taklit eder. Beklenen yanıtları ayarlamaya, istek gövdesini ve başlıklarını kontrol etmeye, ağ hatalarını simüle etmeye olanak tanır.
  • OHHTTPStubs — iOS için kütüphane, NSURLProtocol düzeyinde ağ isteklerini keser ve önceden hazırlanmış yanıtları döndürür. Gecikmeleri ve bağlantı hatalarını destekler.
  • Room Testing — Android’in veritabanı testi için yerleşik mekanizması: bellekte Room örneği oluşturma, okuma ve yazma işlemlerini gerçekleştirme, geçişleri ve tetikleyicileri kontrol etme.
  • Core Data Testing — iOS için yaklaşım, bellekte bir Core Data konteynerı oluşturarak kalıcı depolama olmadan sorguları, varlık ilişkilerini ve veri kalıcılığını test etmeye olanak tanır.

Entegrasyon testleri için kod örnekleri

Android ve iOS için entegrasyon testlerinin pratik örneklerine bakalım. Android platformu için JUnit ile birlikte MockWebServer kullanıyoruz, iOS için — OHHTTPStubs kütüphanesiyle XCTest. Her iki örnek de bir API’den veri alma ve yerel bir depoda saklama senaryosunu doğrular.

Android: MockWebServer ile ağ katmanını test etme

Bu test, taklit edilen sunucuya yapılan bir Retrofit isteğinin doğru JSON döndürdüğünü ve deponun yanıtı bir alan modeline dönüştürdüğünü doğrular. MockWebServer isteği keser ve belirtilen JSON’ı döndürür, ardından test beklenen sonucu gerçek sonuçla karşılaştırır.

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: OHHTTPStubs ile API isteklerini test etme

iOS için benzer bir test, URL isteklerini kesmek için OHHTTPStubs kullanır. Kütüphane, URL Loading System’in sistem framework düzeyinde sunucu yanıtını değiştirerek URLSession, Alamofire veya Moya gibi herhangi bir ağ kütüphanesinin test edilmesine olanak tanır.

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)
    }
}

Entegrasyon testi için en iyi uygulamalar

Etkili entegrasyon testleri, test kararlılığını artıran ve bakım maliyetlerini azaltan bir dizi uygulamanın izlenmesini gerektirir. Harici bağımlılıkları izole edin: üretim örnekleri yerine bellek içi veritabanları kullanın ve üçüncü taraf API’leri stub kütüphaneleri kullanarak taklit edin. Bu, ağ kullanılabilirliği veya harici hizmet durumundan kaynaklanan deterministik olmayan hataları ortadan kaldırır.

Test bağımsızlığını koruyun: her entegrasyon testi, diğer testlerin sonuçlarına bağlı olmadan izole bir şekilde çalışmalıdır. Test ortamını hazırlamak ve temizlemek için JUnit’te @Before ve @After ek açıklamalarını veya XCTest’te setUp ve tearDown’ı kullanın. Bu, testlerin birbirini etkilemesini önler ve hata teşhisini basitleştirir.

Sınır durumlarını kapsayın: entegrasyon testleri yalnızca başarılı senaryoları (happy path) değil, aynı zamanda hata işleme — zaman aşımları, HTTP 4xx ve 5xx kodları, boş yanıtlar, bozuk JSON — işlemlerini de doğrulamalıdır. Google Testing Blog (2022)’ye göre, üretim olaylarının %60’ı testler tarafından kapsanmayan sınır durumlarının hatalı işlenmesiyle ilgilidir.

Sıkça sorulan sorular

Entegrasyon testi birim testinden nasıl farklıdır?

Birim testleri, bağımlılıkları stub’larla değiştirerek tek bir sınıfı veya işlevi izole bir şekilde kontrol eder. Entegrasyon testleri birden çok gerçek bileşenin etkileşimini doğrular — örneğin, bir ağ bağlantısı ve bir veritabanını aynı anda.

Entegrasyon testlerini çalıştırmak ne kadar sürer?

Entegrasyon testlerinin çalıştırılması genellikle test sayısına ve ortam karmaşıklığına bağlı olarak 2 ila 15 dakika sürer. Büyük projeler için, birleştirme öncesinde toplam doğrulama süresini azaltmak amacıyla testlerin bir CI sisteminde paralel işlere bölünmesi önerilir.

Hangi bileşenler zorunlu olarak entegrasyon testleriyle kapsanmalıdır?

İlk olarak, entegrasyon testleri ağ katmanı, veritabanı ve sistem hizmetleri — bildirimler, kamera, coğrafi konum — için yazılır. Backend’e API istekleri ve yerel depolama işlemleri en yüksek ROI’yi sağlar çünkü bu bileşenler en sık gerileme kaynağı haline gelir.

Tek bir ekran için entegrasyon testi gerekli midir?

Tek bir ekran için ViewModel birim testleri ve UI testleri yeterlidir. Tek bir ekran için entegrasyon testleri yalnızca ekranın birden çok veri kaynağıyla etkileşime girmesi durumunda haklıdır — örneğin, iki farklı API’den gelen yanıtları birleştiriyor veya ağa ve yerel veritabanına aynı anda veri yazıyorsa.

Entegrasyon testleri ne sıklıkla çalıştırılmalıdır?

Entegrasyon testleri her pull request’te CI hattında ve ana sürümlerden önce çalıştırılmalıdır. Ayrıca, bağımlılıklardaki veya test ortamındaki değişikliklerle ilgili kusurları tespit etmek için entegrasyon testlerinin tam setinin gece (nightly build) çalıştırılması önerilir.

Özet

  • Entegrasyon testi uygulama bileşenleri — ağ katmanı, veritabanı ve hizmetler — arasındaki etkileşimi doğrular.
  • Big Bang küçük projeler için uygundur, Bottom-Up ve Top-Down — karmaşık mimariye sahip sistemler için.
  • MockWebServer ve OHHTTPStubs sırasıyla Android ve iOS için ana sunucu taklit araçlarıdır.
  • Entegrasyon testleri, Martin Fowler’a göre birim testlerinin kaçırdığı kusurların %40’ına kadarını tespit eder.
  • Bellek içi veritabanları ve stub’lar aracılığıyla bağımlılık izolasyonu test kararlılığını artırır ve deterministik olmayan hataları ortadan kaldırır.
  • Entegrasyon testi aşamasındaki düzeltme maliyeti, bir kusurun üretime ulaşmasından sonraki maliyetten 5 kat daha düşüktür.
  • Tam kapsam için her pull request’te CI hattına ve gece çalıştırmalarına entegrasyon testlerini dahil edin.

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ış

Ayrıca okuyun