Sinusuri ng pagsusuri ng integrasyon ang tamang interaksyon sa pagitan ng mga bahagi ng mobile application — mga modyul, serbisyo, database at panlabas na API. Hindi tulad ng mga unit test na naghihiwalay sa bawat bahagi, natutuklasan ng mga integrasyon test ang mga error sa mga dugtungan: hindi pagkakatugma ng mga format ng datos, pagkasira sa pagpapadala ng parameter at hindi tamang pagproseso ng mga tugon mula sa server. Ayon sa datos ng Martin Fowler, 2018, ang mga integrasyon test ay sumasaklaw hanggang 40% ng mga kritikal na depekto na hindi natuklasan ng mga unit test at nagbibigay ng katiyakan sa katatagan ng sistema bago ilabas.
Mga pangunahing punto
Pagsusuri ng integrasyon — ay ang yugto ng pagpapatunay ng software kung saan sinusuri ang tamang interaksyon sa pagitan ng mga indibidwal na modyul o subsystem ng application. Habang sinusuri ng mga unit test ang bawat bahagi nang nakahiwalay, pinagsasama-sama ng mga integrasyon test ang mga bahaging ito at sinusuri kung paano gumagana ang mga ito nang magkakasama. Kasama sa mga tipikal na senaryo ang paglilipat ng datos sa pagitan ng network layer at repository, pagsulat sa database sa pamamagitan ng ORM at pagproseso ng mga tugon mula sa mga third-party na API.
Sa konteksto ng pagpapaunlad ng mobile, sinasaklaw ng mga integrasyon test ang interaksyon sa pagitan ng UI layer, lohika ng negosyo at mga pinagmumulan ng datos. Halimbawa, maaaring suriin ng isang test na pagkatapos pindutin ang buton “Login”, ang application ay nagpapadala ng request sa server, tumatanggap ng token at iniimbak ito sa lokal na imbakan. Kinukumpirma ng ganitong pagsusuri na ang kadena ng mga bahagi ay gumagana nang walang pagkasira.
Ayon sa ulat ng World Quality Report 2023, ang mga kumpanyang regular na naglalapat ng pagsusuri ng integrasyon ay nagbabawas ng bilang ng mga insidente sa produksyon ng 35% kumpara sa mga proyektong umaasa lamang sa mga unit test. Ginagawa nitong mandatoryong elemento ng estratehiya sa pagtiyak ng kalidad sa komersyal na pagpapaunlad ang mga pagsusuri ng integrasyon.
Ang mga mobile application ay binubuo ng maraming magkakaugnay na bahagi: mga network request, lokal na database, push notification, serbisyo ng sistema at third-party na SDK. Bawat isa sa mga bahaging ito ay binuo nang hiwalay, ngunit sa runtime sila ay nagpapalitan ng datos sa real-time. Natutuklasan ng pagsusuri ng integrasyon ang mga depekto na hindi matatagpuan sa nakahiwalay na pagsusuri ng mga modyul.
Sa mga tipikal na problemang natutuklasan ng mga integrasyon test ay ang hindi pagkakatugma ng uri ng datos sa pagitan ng API at modelo ng application, mga error sa serialization ng JSON, hindi tamang pagproseso ng mga network timeout at pagkasira sa parallel na pag-access sa database sa pamamagitan ng Room o Core Data. Kung walang mga pagsusuri ng integrasyon, ang mga ganitong depekto ay napupunta sa produksyon at lumalabas lamang sa mga tunay na gumagamit.
Ang pananaliksik ng Google Testing Blog (2021) ay nagpapakita na ang gastos sa pag-aayos ng depektong natuklasan sa yugto ng pagsusuri ng integrasyon ay 5 beses na mas mababa kaysa pagkatapos ilabas. Ito ay dahil sa mga naunang yugto, ang developer ay may kumpletong konteksto ng error at maaaring ayusin ito nang walang apurahang hotfix cycle. Ang pamumuhunan ng oras sa pagsulat ng mga integrasyon test ay nagbabayad sa pamamagitan ng pagbawas ng gastos sa pagpapanatili at pagtaas ng tiwala ng gumagamit.
May tatlong pangunahing approach sa pag-oorganisa ng mga integrasyon test: Big Bang, Bottom-Up at Top-Down. Ang pagpili ng estratehiya ay nakadepende sa laki ng proyekto, arkitektura ng application at pagkakaroon ng mga bahagi sa oras ng pagsulat ng mga test. Bawat approach ay may mga kalamangan at limitasyon na mahalagang isaalang-alang sa pagpaplano ng saklaw ng test.
Big Bang — approach kung saan ang lahat ng bahagi ng sistema ay ikinokonekta nang sabay-sabay, pagkatapos ay isinasagawa ang pangkalahatang pagtakbo ng test. Ang pamamaraang ito ay simple sa implementasyon: hindi nangangailangan ng pagsulat ng mga stub o pag-emula ng mga indibidwal na modyul. Gayunpaman, kapag natuklasan ang isang error, mahirap matukoy kung aling bahagi ang pinagmulan nito. Ang Big Bang ay makatwiran sa maliliit na proyekto na may simpleng arkitektura, kung saan ang bilang ng mga modyul ay hindi hihigit sa lima.
Bottom-Up — estratehiya kung saan ang pagsusuri ng integrasyon ay nagsisimula sa mga bahaging mababa ang antas: database, network layer, mga serbisyo ng sistema. Pagkatapos suriin ang bawat antas, unti-unting ikinokonekta ng mga test ang mas mataas na modyul — mga repository, Use Case class at ViewModel. Ang pangunahing bentahe ay maagang pagtuklas ng mga depekto sa pundasyonal na mga layer ng application, na nagbabawas ng panganib ng mga cascading error sa mga huling yugto ng pagpapaunlad.
Top-Down — approach kung saan nagsisimula ang pagsusuri sa mga bahaging mataas ang antas — mga screen ng UI at nabigasyon, habang ang mga modyul na mas mababa ay ginagaya gamit ang mga stub o mock. Ito ay nagpapahintulot sa pagsusuri ng mga senaryo ng gumagamit bago pa ganap na maipatupad ang bahagi ng server o database. Ang Top-Down ay lalong kapaki-pakinabang sa parallel na pagpapaunlad ng client at server na bahagi, kapag ang backend ay hindi pa handa para sa tunay na integrasyon.
Para sa pagsusuri ng integrasyon ng mga mobile application, ginagamit ang isang hanay ng mga espesyalisadong kasangkapan na nahahati sa tatlong kategorya: mga aklatan para sa pag-emula ng server, mga framework para sa pagtatrabaho sa database at mga kasangkapan para sa pagsusuri ng mga serbisyo ng sistema. Ang pagpili ng partikular na kasangkapan ay nakadepende sa platform — Android o iOS — at sa teknolohiya stack ng proyekto.
Tingnan natin ang mga praktikal na halimbawa ng mga integrasyon test para sa Android at iOS. Para sa Android platform ginagamit natin ang MockWebServer kasama ng JUnit, para sa iOS — XCTest na may aklatan ng OHHTTPStubs. Parehong halimbawa ay sumusuri sa senaryo ng pagkuha ng datos mula sa API at pag-imbak nito sa lokal na repository.
Sinusuri ng test na ito na ang Retrofit request sa emulated server ay nagbabalik ng tamang JSON, at ang repository ay nagko-convert ng tugon sa isang domain model. MockWebServer ay humaharang ng request at nagbabalik ng itinakdang JSON, pagkatapos ay inihahambing ng test ang inaasahang resulta sa aktwal na resulta.
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()
}
}
Para sa iOS, ang katulad na test ay gumagamit ng OHHTTPStubs para sa pagharang ng mga URL request. Pinapalitan ng aklatan ang tugon ng server sa antas ng system framework URL Loading System, na nagpapahintulot sa pagsusuri ng anumang network library — URLSession, Alamofire o 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)
}
}
Ang epektibong pagsusuri ng integrasyon ay nangangailangan ng pagsunod sa isang hanay ng mga kasanayan na nagpapataas ng katatagan ng mga test at nagbabawas ng gastos sa pagpapanatili nito. Ihiwalay ang mga panlabas na dependensiya: gumamit ng in-memory database sa halip na mga production instance at i-emula ang mga panlabas na API sa pamamagitan ng test stub library. Inaalis nito ang mga non-deterministic na pagkasira na dulot ng pagkakaroon ng network o estado ng mga panlabas na serbisyo.
Panatilihin ang kalayaan ng mga test: bawat integrasyon test ay dapat gumana nang nakahiwalay, walang depende sa resulta ng ibang mga test. Gamitin ang @Before at @After na annotation sa JUnit o setUp at tearDown sa XCTest para sa paghahanda at paglilinis ng kapaligiran ng test. Pinipigilan nito ang mutual na impluwensya ng mga test at pinapasimple ang diagnostiko ng error.
Saklawin ang mga boundary case: ang mga integrasyon test ay dapat sumuri hindi lamang sa mga senaryo ng tagumpay (happy path), kundi pati na rin sa paghawak ng error — mga timeout, HTTP code 4xx at 5xx, walang laman na tugon, sira na JSON. Ayon sa datos ng Google Testing Blog (2022), 60% ng mga insidente sa produksyon ay nauugnay sa hindi tamang paghawak ng mga boundary case na hindi nasaklaw ng mga test.
Mga madalas itanong
Sinusuri ng mga unit test ang isang klase o function nang nakahiwalay, pinapalitan ang mga dependensiya ng mga stub. Sinusuri ng mga integrasyon test ang interaksyon ng ilang tunay na bahagi — halimbawa, ang koneksyon sa network at database nang sabay-sabay.
Ang pagpapatakbo ng mga integrasyon test ay karaniwang tumatagal ng 2 hanggang 15 minuto depende sa bilang ng mga test at pagiging kumplikado ng kapaligiran. Para sa malalaking proyekto, inirerekomenda na hatiin ang mga test sa parallel na job sa sistema ng CI upang bawasan ang kabuuang oras ng pagsusuri bago ang merge.
Sa unang pagkakataon, ang mga integrasyon test ay isinusulat para sa network layer, database at mga serbisyo ng sistema — mga notipikasyon, kamera, geolokasyon. Ang mga request ng API sa backend at mga operasyon sa lokal na imbakan ay nagbibigay ng pinakamataas na ROI, dahil ang mga bahaging ito ay kadalasang nagiging pinagmulan ng mga regression.
Para sa isang screen, sapat na ang mga unit test ng ViewModel at mga UI test. Ang mga integrasyon test para sa isang screen ay makatwiran lamang kung ang screen ay nakikipag-ugnayan sa maraming pinagmumulan ng datos — halimbawa, pinagsasama ang mga tugon mula sa dalawang magkaibang API o nagsusulat ng datos nang sabay-sabay sa network at lokal na database.
Ang mga integrasyon test ay pinapatakbo sa bawat pull request sa CI pipeline at bago ang mga pangunahing release. Inirerekomenda din na patakbuhin ang buong hanay ng mga integrasyon test sa gabi (nightly build) upang matuklasan ang mga depekto na may kaugnayan sa mga pagbabago sa dependensiya o kapaligiran ng test.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din