Pengujian integrasi memeriksa kebenaran interaksi antara komponen aplikasi seluler — modul, layanan, basis data, dan API eksternal. Tidak seperti pengujian unit yang mengisolasi setiap komponen, pengujian integrasi mendeteksi kesalahan pada titik sambung: ketidakcocokan format data, kegagalan saat transmisi parameter, dan pemrosesan respons server yang tidak benar. Menurut data Martin Fowler, 2018, pengujian integrasi mencakup hingga 40% cacat kritis yang terlewatkan oleh pemeriksaan unit dan memberikan keyakinan akan stabilitas sistem sebelum rilis.
Poin utama
Pengujian integrasi — adalah tahap verifikasi perangkat lunak di mana kebenaran interaksi antara modul atau subsistem individual aplikasi dievaluasi. Sementara pengujian unit memeriksa setiap komponen secara terisolasi, pengujian integrasi menggabungkan komponen-komponen ini bersama-sama dan memeriksa bagaimana mereka bekerja dalam satu kesatuan. Skenario tipikal meliputi transfer data antara lapisan jaringan dan repositori, penulisan ke basis data melalui ORM, dan pemrosesan respons dari API pihak ketiga.
Dalam konteks pengembangan seluler, pengujian integrasi mencakup interaksi antara lapisan UI, logika bisnis, dan sumber data. Misalnya, sebuah pengujian dapat memeriksa bahwa setelah menekan tombol “Masuk”, aplikasi mengirimkan permintaan ke server, menerima token, dan menyimpannya di penyimpanan lokal. Pemeriksaan semacam itu mengonfirmasi bahwa rantai komponen berfungsi tanpa kegagalan.
Menurut laporan World Quality Report 2023, perusahaan yang secara teratur menerapkan pengujian integrasi mengurangi jumlah insiden produksi sebesar 35% dibandingkan dengan proyek yang hanya mengandalkan pengujian unit. Hal ini menjadikan pemeriksaan integrasi sebagai elemen wajib dalam strategi jaminan kualitas di pengembangan komersial.
Aplikasi seluler terdiri dari banyak komponen yang saling terhubung: permintaan jaringan, basis data lokal, notifikasi push, layanan sistem, dan SDK pihak ketiga. Masing-masing komponen ini dikembangkan secara terpisah, tetapi saat runtime mereka bertukar data secara real-time. Pengujian integrasi mendeteksi cacat yang tidak dapat ditemukan saat pemeriksaan modul secara terisolasi.
Di antara masalah tipikal yang ditemukan oleh pengujian integrasi adalah ketidakcocokan tipe data antara API dan model aplikasi, kesalahan serialisasi JSON, pemrosesan batas waktu jaringan yang tidak benar, dan kegagalan saat akses paralel ke basis data melalui Room atau Core Data. Tanpa pemeriksaan integrasi, cacat semacam itu masuk ke produksi dan hanya muncul pada pengguna nyata.
Penelitian Google Testing Blog (2021) menunjukkan bahwa biaya perbaikan cacat yang ditemukan pada tahap pengujian integrasi 5 kali lebih rendah daripada setelah rilis. Ini karena pada tahap awal, pengembang memiliki konteks kesalahan yang lengkap dan dapat memperbaikinya tanpa siklus hotfix yang mendesak. Investasi waktu dalam menulis pengujian integrasi terbayar melalui pengurangan biaya pemeliharaan dan peningkatan kepercayaan pengguna.
Ada tiga pendekatan utama untuk mengorganisir pengujian integrasi: Big Bang, Bottom-Up, dan Top-Down. Pemilihan strategi tergantung pada ukuran proyek, arsitektur aplikasi, dan ketersediaan komponen pada saat penulisan pengujian. Setiap pendekatan memiliki kelebihan dan keterbatasan yang penting untuk dipertimbangkan saat merencanakan cakupan pengujian.
Big Bang — pendekatan di mana semua komponen sistem dihubungkan secara bersamaan, setelah itu dilakukan pengujian secara keseluruhan. Metode ini sederhana dalam implementasi: tidak memerlukan penulisan stub atau emulasi modul individual. Namun, saat mendeteksi kesalahan, sulit untuk menentukan komponen mana yang menjadi sumbernya. Big Bang dibenarkan dalam proyek kecil dengan arsitektur sederhana, di mana jumlah modul tidak lebih dari lima.
Bottom-Up — strategi di mana pengujian integrasi dimulai dengan komponen tingkat rendah: basis data, lapisan jaringan, layanan sistem. Setelah memeriksa setiap tingkat, pengujian secara bertahap menghubungkan modul yang lebih tinggi — repositori, kelas Use Case, dan ViewModel. Keuntungan utama adalah deteksi dini cacat pada lapisan fundamental aplikasi, yang mengurangi risiko kesalahan berantai pada tahap pengembangan selanjutnya.
Top-Down — pendekatan di mana pengujian dimulai dengan komponen tingkat tinggi — layar UI dan navigasi, sementara modul tingkat rendah ditiru menggunakan stub atau mock. Ini memungkinkan pemeriksaan skenario pengguna sebelum bagian server atau basis data sepenuhnya diimplementasikan. Top-Down sangat berguna dalam pengembangan paralel bagian klien dan server, ketika backend belum siap untuk integrasi nyata.
Untuk pengujian integrasi aplikasi seluler digunakan sejumlah alat khusus yang dibagi menjadi tiga kategori: pustaka untuk emulasi server, kerangka kerja untuk bekerja dengan basis data, dan alat pemeriksaan layanan sistem. Pemilihan alat tertentu tergantung pada platform — Android atau iOS — dan tumpukan teknologi proyek.
Mari kita lihat contoh praktis pengujian integrasi untuk Android dan iOS. Untuk platform Android kita menggunakan MockWebServer bersama dengan JUnit, untuk iOS — XCTest dengan pustaka OHHTTPStubs. Kedua contoh memeriksa skenario pengambilan data dari API dan penyimpanannya di repositori lokal.
Pengujian ini memeriksa bahwa permintaan Retrofit ke server yang diemulasi mengembalikan JSON yang benar, dan repositori mengubah respons menjadi model domain. MockWebServer mencegat permintaan dan mengembalikan JSON yang ditentukan, setelah itu pengujian membandingkan hasil yang diharapkan dengan hasil aktual.
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()
}
}
Untuk iOS, pengujian serupa menggunakan OHHTTPStubs untuk mencegat permintaan URL. Pustaka ini mengganti respons server pada tingkat kerangka kerja sistem URL Loading System, memungkinkan pengujian pustaka jaringan apa pun — URLSession, Alamofire, atau Moya.
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)
}
}
Pengujian integrasi yang efektif memerlukan kepatuhan terhadap sejumlah praktik yang meningkatkan stabilitas pengujian dan mengurangi biaya pemeliharaannya. Isolasi dependensi eksternal: gunakan basis data in-memory alih-alih instance produksi dan emulasikan API eksternal melalui pustaka stub pengujian. Ini menghilangkan kegagalan non-deterministik yang disebabkan oleh ketersediaan jaringan atau status layanan eksternal.
Jaga independensi pengujian: setiap pengujian integrasi harus bekerja secara terisolasi, tanpa ketergantungan pada hasil pengujian lain. Gunakan anotasi @Before dan @After di JUnit atau setUp dan tearDown di XCTest untuk persiapan dan pembersihan lingkungan pengujian. Ini mencegah saling mempengaruhi antar pengujian dan menyederhanakan diagnostik kesalahan.
Cakup kasus batas: pengujian integrasi harus memeriksa tidak hanya skenario sukses (happy path), tetapi juga penanganan kesalahan — batas waktu, kode HTTP 4xx dan 5xx, respons kosong, JSON rusak. Menurut data Google Testing Blog (2022), 60% insiden produksi terkait dengan penanganan kasus batas yang tidak benar yang tidak tercakup oleh pengujian.
Pertanyaan yang sering diajukan
Pengujian unit memeriksa satu kelas atau fungsi dalam isolasi, menggantikan dependensi dengan stub. Pengujian integrasi memeriksa interaksi beberapa komponen nyata — misalnya, koneksi jaringan dan basis data secara bersamaan.
Menjalankan pengujian integrasi biasanya memakan waktu 2 hingga 15 menit tergantung pada jumlah pengujian dan kompleksitas lingkungan. Untuk proyek besar, disarankan untuk membagi pengujian menjadi job paralel di sistem CI untuk mengurangi total waktu pemeriksaan sebelum merge.
Pertama-tama, pengujian integrasi ditulis untuk lapisan jaringan, basis data, dan layanan sistem — notifikasi, kamera, geolokasi. Permintaan API ke backend dan operasi dengan penyimpanan lokal memberikan ROI tertinggi, karena komponen ini paling sering menjadi sumber regresi.
Untuk satu layar, pengujian unit ViewModel dan pengujian UI sudah cukup. Pengujian integrasi untuk satu layar hanya dibenarkan jika layar berinteraksi dengan beberapa sumber data — misalnya, menggabungkan respons dari dua API berbeda atau menulis data secara bersamaan ke jaringan dan basis data lokal.
Pengujian integrasi dijalankan pada setiap pull request di pipeline CI dan sebelum rilis utama. Juga disarankan untuk menjalankan set lengkap pengujian integrasi di malam hari (nightly build) untuk mendeteksi cacat terkait perubahan dependensi atau lingkungan pengujian.
Ringkasan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga