Pagsubok sa Mobile Development: ano ito, anong mga uri at paano ayusin

May-akda: IT Sectr Nai-publish: 2026-03-31 Oras ng pagbabasa: 9 min

Ang pagsubok ng mobile app ay ang proseso ng pag-verify na ang isang application ay gumagana nang tama, hindi nag-crash, at nakakatugon sa mga kinakailangan. Ayon sa Software Testing Help (2025), ang automated na pagsubok ay nagbabawas ng oras ng regression checks ng 70–80% kumpara sa manu-manong pagsubok. Sa artikulong ito, tatalakayin natin ang mga antas ng pagsubok, mga tool para sa iOS at Android, TDD at BDD, at CI/CD para sa mga pagsubok.

Mga Pangunahing Punto

  • Mga pagsubok ng unit nagbe-verify ng mga indibidwal na function at klase; mga pagsubok ng integrasyon nagbe-verify ng interaksyon ng modyul; E2E sumasaklaw sa kumpletong senaryo ng user.
  • iOS: XCTest para sa mga pagsubok ng unit, XCUITest para sa mga pagsubok ng UI. Android: JUnit + Mockito + Espresso.
  • Cross-platform frameworks: Detox (React Native), Appium (unibersal), XCUITest (iOS).
  • TDD (Test-Driven Development) — una ang pagsubok, pagkatapos ang code; BDD — mga senaryo sa simpleng wika.
  • CI/CD: awtomatikong tumatakbo ang mga pagsubok sa bawat push — ito ay isang mandatoryong pamantayan para sa komersyal na pag-develop.

Mga Antas ng Pagsubok: Unit, Integration, E2E

Pagsubok ng Unit

Mga pagsubok ng unit ay ang pundasyon ng pagsubok ng mobile app. Nobe-verify nila ang pinakamaliit na yunit ng code — isang function, method o klase na nakahiwalay sa natitirang sistema. Sa mobile development, ang mga pagsubok ng unit ay isinusulat sa JUnit (Android) at XCTest (iOS). Ang isang mahusay na pagsubok ng unit ay dapat na mabilis, independyente, at nauulit — hindi ito dapat umasa sa network, database, o mga bahagi ng UI. Para sa paghihiwalay, ginagamit ang test doubles: mock, stub at fake.

Mockito (Java/Kotlin) at MockK (Kotlin-first) ay mga sikat na library para sa paggawa ng mga mock object sa Android. Sa iOS, ginagamit ang OCMock, Cuckoo o manu-manong protocol. Patakaran: dapat saklawin ng mga pagsubok ng unit ang lohika ng negosyo at mga modelo ng data. Ang mga pagsubok ng UI ay hindi dapat dumoble sa mga pagsubok ng unit — nobe-verify nila ang interaksyon ng user sa interface.

Pagsubok ng Integrasyon

Mga pagsubok ng integrasyon ay nobe-verify ang interaksyon sa pagitan ng mga bahagi: repository na may database, ViewModel na may serbisyo ng API, nabigasyon sa pagitan ng mga screen. Hindi tulad ng mga pagsubok ng unit, ang mga pagsubok ng integrasyon ay gumagamit ng tunay o malapit sa tunay na dependencies (halimbawa, in-memory database o mock server). Robolectric ay isang framework para patakbuhin ang mga pagsubok ng Android sa JVM nang walang emulator, na nagpapabilis ng mga pagsubok ng integrasyon ng 10 beses.

Mga pagsubok ng snapshot (Golden Tests) ay isang espesyal na uri ng pagsubok ng integrasyon na nagkukumpara ng isang na-render na bahagi ng UI sa isang reference na imahe (snapshot). Kung magbago ang anyo, bumagsak ang pagsubok — nakikita ng developer kung ano ang nagbago. Ang Facebook SnapshotTestCase (iOS) at Shot (Android) ay mga sikat na tool para sa pagsubok ng snapshot.

Pagsubok ng E2E at UI

Mga pagsubok ng E2E (end-to-end) ay nobe-verify ang kumpletong senaryo ng user mula simula hanggang katapusan: paglunsad ng app, pag-login, pagsasagawa ng aksyon, pagsuri ng resulta. Ang mga pagsubok ng UI ay isang subset ng E2E na nakatuon sa interface. Mga tool: Espresso (Android), XCUITest (iOS), Detox (React Native). Ang mga pagsubok ng E2E ay pinakamabagal, kaya hiwalay na pinapatakbo sa CI — karaniwan sa mga nightly build.

Mga Tool sa iOS: XCTest at XCUITest

XCTest

XCTest ay ang built-in na framework ng Apple para sa pagsubok ng unit ng mga mobile application. Ang XCTestRunner ay nagpapatakbo ng mga pagsubok sa simulator o sa isang tunay na device. Ang mga pagsubok ay nagmamana mula sa XCTestCase, naglalaman ng setUp at tearDown para sa paghahanda at paglilinis. Kasama sa XCTest ang XCTAssert para sa mga asersyon (XCTAssertEqual, XCTAssertNil, XCTAssertTrue) at XCTWaiter para sa paghihintay ng mga asynchronous na operasyon.

Halimbawa ng isang simpleng pagsubok ng XCTest: paggawa ng modelong User, pagsuri sa kawastuhan ng inisyalisasyon, pag-format ng pangalan at pagkalkula ng edad. Code Coverage sa Xcode ay nagpapakita kung aling mga linya ng code ang nasasaklaw ng mga pagsubok — ang layunin para sa mga komersyal na proyekto: hindi bababa sa 70–80% na saklaw ng lohika ng negosyo. Ang XCTest ay isinama sa Xcode Server at mga sistema ng CI sa pamamagitan ng xcodebuild test.

XCUITest

XCUITest ay ang framework ng Apple para sa pagsubok ng UI. Gumagana ito sa pamamagitan ng mga identifier ng accessibility: Ang XCUIElementQuery ay nakakahanap ng mga button, input field, table ayon sa label, identifier o uri. Ang XCUITest ay nagre-record ng pagkakasunod-sunod ng mga aksyon (record/playback) at bumubuo ng code ng pagsubok. Mahalaga: lahat ng elemento ng UI ay dapat may accessibilityIdentifier para sa matatag na operasyon ng pagsubok.

Mga Tool sa Android: JUnit, Espresso, Robolectric

JUnit at Mockito

JUnit ay ang pangunahing framework para sa modular na pagsubok ng mga mobile application sa Java/Kotlin. Sa Android, ginagamit ang JUnit 4 (pinakabagong stable na bersyon 4.13.2) at JUnit 5 para sa mga bagong proyekto. Mockito ay isang library para sa paggawa ng mga mock object: when(mock.method()).thenReturn(value) — isang karaniwang pattern para ihiwalay ang nasubok na klase mula sa mga dependencies.

Halimbawa ng isang pagsubok ng JUnit para sa Android:

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

Espresso ay ang framework ng Google para sa mga pagsubok ng UI ng Android. Awtomatikong nag-sync ang Espresso sa thread ng UI: onView(withId(R.id.button)).perform(click()).check(matches(isDisplayed())). Ang Espresso ay madaling isulat at matatag salamat sa built-in na paghihintay ng idle state. UI Automator ay isang framework para sa mga cross-application na pagsubok na maaaring makipag-ugnayan sa mga elemento ng system (mga dialog ng pahintulot, anino ng notification).

Mga Cross-Platform Tool: Detox, Appium

Detox para sa React Native

Detox ay isang gray-box E2E framework para sa pagsubok ng React Native mobile application mula sa Wix. Gumagana ang Detox sa parehong platform mula sa isang solong test codebase, gamit ang Espresso (Android) at XCUITest (iOS) sa ilalim ng hood. Awtomatikong naghihintay ang Detox hanggang maging idle ang app (walang animation, network request, timer) at pagkatapos lamang isagawa ang susunod na aksyon.

Appium

Appium ay isang unibersal na cross-platform framework na sumusuporta sa Android, iOS, Web at hybrid na application. Gumagamit ang Appium ng WebDriver protocol at sumusuporta sa anumang programming language (Java, Python, JS, Ruby). Ang Appium Server ay gumagana bilang isang HTTP server na nagsasalin ng mga command sa native na UI Automator / XCUITest command. Ang pangunahing disbentaha ng Appium ay bilis: mas mabagal tumakbo ang mga pagsubok kaysa sa native na Espresso o XCUITest.

Paghahambing ng mga tool sa pagsubok ng iOS at Android
Pamantayan iOS Android
Mga pagsubok ng unit XCTest JUnit 4/5 + Mockito
Mga pagsubok ng UI XCUITest Espresso, UI Automator
Mga pagsubok ng snapshot FBSnapshotTestCase Shot, Roborazzi
Automation ng kilos XCUIGesture UiAutomator touch
Saklaw ng code Xcode Code Coverage Jacoco
Integrasyon ng CI xcodebuild test Gradle connectedCheck

TDD at BDD: Mga Metodolohiya ng Pagsubok

TDD: Test-Driven Development

TDD ay isang metodolohiya ng pagsubok ng mobile app kung saan isinusulat ang pagsubok bago ang code ng implementasyon. Ang siklo ng Red-Green-Refactor: (1) sumulat ng pagsubok na bumagsak (Red), (2) sumulat ng minimal na code para pumasa ang pagsubok (Green), (3) i-refactor ang code habang pinapanatili ang pagpasa ng pagsubok. Ang TDD ay nagbibigay ng 100% saklaw ng pagsubok para sa bagong functionality at malinis na arkitektura, dahil ang pagsubok ay ang unang detalye ng kinakailangan.

BDD: Behaviour-Driven Development

BDD ay isang extension ng TDD kung saan isinusulat ang mga pagsubok sa natural na wika sa format na Given-When-Then. Given (konteksto) — When (aksyon) — Then (inaasahang resulta). Ang mga pagsubok ng BDD ay naiintindihan ng lahat ng miyembro ng team: mga developer, tester, analyst at kliyente. Mock vs Stub vs Fake: Ang Mock ay nagbe-verify ng interaksyon (kung ang method ay tinawag), ang Stub ay nagbabalik ng nakapirming data, ang Fake ay isang pinasimpleng gumaganang implementasyon (halimbawa, in-memory DB). Sa IT Sectr, ginagamit namin ang TDD para sa kritikal na lohika ng negosyo at BDD para sa mga senaryo ng pagtanggap.

Test Doubles ay ang pangkalahatang pangalan para sa mga object na pumapalit sa tunay na dependencies sa mga pagsubok. May apat na uri: Dummy (bagay para punan ang mga parameter, hindi ginagamit), Stub (nagbabalik ng ibinigay na halaga), Spy (nagre-record ng mga tawag para sa beripikasyon), Mock (nag-predefine ng inaasahang mga tawag). Ang pag-unawa sa pagkakaiba ay kritikal para sa tamang disenyo ng pagsubok.

CI/CD at Device Farm

Automation ng Pagsubok sa CI/CD

CI/CD — Continuous Integration at Continuous Delivery: ang praktika ng awtomatikong pagbuo at pagsubok ng mga mobile application sa bawat pagbabago ng code. Sa mobile development, ang pipeline ng CI/CD ay kinabibilangan ng: linting, mga pagsubok ng unit, mga pagsubok ng integrasyon, build ng APK/IPA at mga pagsubok ng UI. GitHub Actions at Bitrise ay mga sikat na platform para sa mobile CI/CD. Ang mga pagsubok ay dapat tumakbo nang mabilis: mga pagsubok ng unit sa 1–2 minuto, integrasyon sa 5–10, UI sa 15–30 minuto.

Device Farm

Device Farm ay isang sakahan ng mga tunay na device para sa pagsubok. Ang Firebase Test Lab (Android) at Xcode Cloud (iOS) ay nagbibigay ng cloud access sa daan-daang modelo ng device. Inilalahad ng Device Farm ang mga problemang hindi nakikita sa mga emulator: iba't ibang laki ng screen, performance sa mga lumang device, mga problema sa compatibility. Sa IT Sectr, regular kaming gumagamit ng Firebase Test Lab para sa Android at Xcode Cloud para sa iOS.

Mga Madalas Itanong

Ilang porsyento ng saklaw ng pagsubok ang itinuturing na normal?

Para sa mga komersyal na proyekto, hindi bababa sa 70–80% na saklaw ng lohika ng negosyo. Ang code ng UI ay mas mahirap saklawin — sapat na ang 50%. Ang mahalaga ay hindi ang porsyento kundi ang kalidad ng mga pagsubok: subukan ang mga kritikal na senaryo, mga kaso sa hangganan at paghawak ng error.

Paano naiiba ang Mock sa Stub?

Mock ay nagbe-verify ng interaksyon — kung ang isang partikular na method ay tinawag na may partikular na parameter. Ang Stub ay nagbabalik ng paunang natukoy na data. Ang Mock ay nagsusuri ng pag-uugali, ang Stub ay nagsusuri ng estado.

Dapat ba akong sumulat ng mga pagsubok para sa UI?

Oo, ngunit para lamang sa mga kritikal na senaryo: pag-login, pagrehistro, pagkumpleto ng order, pagbabayad. Ang mga pagsubok ng UI ay mabagal at marupok — huwag sumulat ng pagsubok para sa bawat screen. Tumutok sa mga senaryo ng E2E ng user.

Ano ang Snapshot Test?

Snapshot Test (Golden Test) ay nagkukumpara ng isang na-render na bahagi ng UI sa isang reference na imahe. Kung magbago ang anyo (font, padding, kulay), bumagsak ang pagsubok — sinusuri ng developer kung sinasadya ang pagbabago. Mainam para sa mga library ng bahagi.

Paano pabilisin ang mga pagsubok ng E2E?

Patakbuhin ang mga pagsubok ng E2E nang parallel sa maraming device, gamitin ang Cloud Device Farm at hatiin ang mga pagsubok sa mga independyenteng grupo. I-optimize ang mga pagsubok: bawasan ang paghihintay, gumamit ng mock para sa mga network request.

Buod

  • Mga pagsubok ng unit — ang pundasyon ng pyramid ng pagsubok: mabilis, nakahiwalay, sumasaklaw sa lohika ng negosyo.
  • iOS: XCTest para sa unit, XCUITest para sa UI. Android: JUnit + Mockito, Espresso para sa UI, Robolectric para sa mabilis na pagsubok ng integrasyon.
  • Cross-platform na frameworks: Detox (React Native), Appium (unibersal), XCUITest (iOS-native).
  • TDD — pagsubok bago code, BDD — mga senaryo sa wika ng negosyo (Given-When-Then).
  • CI/CD — awtomatikong pagpapatakbo ng pagsubok sa bawat push ay sapilitan para sa modernong pag-develop.
  • Device Farm — pagsubok sa mga tunay na device sa cloud upang matukoy ang mga problema sa hardware.
  • Ang pyramid ng pagsubok: maraming unit, mas kaunting integrasyon, mas kaunting E2E — ang optimal na balanse ng bilis at saklaw.

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.

Pag-usapan ang proyekto