Pengujian aplikasi seluler adalah proses verifikasi bahwa aplikasi berfungsi dengan benar, tidak crash, dan memenuhi persyaratan. Menurut Software Testing Help (2025), pengujian otomatis mengurangi waktu pemeriksaan regresi sebesar 70–80% dibandingkan dengan pengujian manual. Dalam artikel ini, kita akan membahas tingkat pengujian, alat untuk iOS dan Android, TDD dan BDD, serta CI/CD untuk pengujian.
Poin Utama
Pengujian unit adalah fondasi pengujian aplikasi seluler. Mereka memverifikasi unit kode terkecil — satu fungsi, metode atau kelas yang terisolasi dari sistem lainnya. Dalam pengembangan seluler, pengujian unit ditulis dalam JUnit (Android) dan XCTest (iOS). Pengujian unit yang baik harus cepat, independen, dan dapat diulang — tidak boleh bergantung pada jaringan, database, atau komponen UI. Untuk isolasi, digunakan test doubles: mock, stub, dan fake.
Mockito (Java/Kotlin) dan MockK (Kotlin-first) adalah pustaka populer untuk membuat objek mock di Android. Di iOS, digunakan OCMock, Cuckoo, atau protokol manual. Aturan: pengujian unit harus mencakup logika bisnis dan model data. Pengujian UI tidak boleh menduplikasi pengujian unit — mereka memverifikasi interaksi pengguna dengan antarmuka.
Pengujian integrasi memverifikasi interaksi antar komponen: repositori dengan database, ViewModel dengan layanan API, navigasi antar layar. Tidak seperti pengujian unit, pengujian integrasi menggunakan dependensi nyata atau mendekati nyata (misalnya, database dalam memori atau server mock). Robolectric adalah framework untuk menjalankan pengujian Android di JVM tanpa emulator, mempercepat pengujian integrasi hingga 10 kali lipat.
Pengujian snapshot (Golden Tests) adalah jenis khusus pengujian integrasi yang membandingkan komponen UI yang dirender dengan gambar referensi (snapshot). Jika tampilan berubah, pengujian gagal — pengembang melihat apa yang berubah. Facebook SnapshotTestCase (iOS) dan Shot (Android) adalah alat populer untuk pengujian snapshot.
Pengujian E2E (end-to-end) memverifikasi skenario pengguna lengkap dari awal hingga akhir: meluncurkan aplikasi, login, melakukan tindakan, memeriksa hasil. Pengujian UI adalah subset dari E2E yang berfokus pada antarmuka. Alat: Espresso (Android), XCUITest (iOS), Detox (React Native). Pengujian E2E adalah yang paling lambat, sehingga dijalankan terpisah di CI — biasanya pada build malam hari.
XCTest adalah framework bawaan Apple untuk pengujian unit aplikasi seluler. XCTestRunner menjalankan pengujian di simulator atau perangkat nyata. Pengujian mewarisi dari XCTestCase, berisi setUp dan tearDown untuk persiapan dan pembersihan. XCTest mencakup XCTAssert untuk asersi (XCTAssertEqual, XCTAssertNil, XCTAssertTrue) dan XCTWaiter untuk menunggu operasi asinkron.
Contoh pengujian XCTest sederhana: membuat model User, memeriksa kebenaran inisialisasi, format nama, dan perhitungan usia. Code Coverage di Xcode menunjukkan baris kode mana yang dicakup oleh pengujian — target untuk proyek komersial: setidaknya 70–80% cakupan logika bisnis. XCTest terintegrasi dengan Xcode Server dan sistem CI melalui xcodebuild test.
XCUITest adalah framework Apple untuk pengujian UI. Bekerja melalui pengidentifikasi aksesibilitas: XCUIElementQuery menemukan tombol, bidang input, tabel berdasarkan label, pengidentifikasi, atau jenis. XCUITest merekam urutan tindakan (rekam/putar) dan menghasilkan kode pengujian. Penting: semua elemen UI harus memiliki accessibilityIdentifier untuk pengoperasian pengujian yang stabil.
JUnit adalah framework dasar untuk pengujian unit aplikasi seluler di Java/Kotlin. Di Android, digunakan JUnit 4 (versi stabil terakhir 4.13.2) dan JUnit 5 untuk proyek baru. Mockito adalah pustaka untuk membuat objek mock: when(mock.method()).thenReturn(value) — pola standar untuk mengisolasi kelas yang diuji dari dependensi.
Contoh pengujian JUnit untuk Android:
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 adalah framework Google untuk pengujian UI Android. Espresso secara otomatis menyinkronkan dengan thread UI: onView(withId(R.id.button)).perform(click()).check(matches(isDisplayed())). Espresso mudah ditulis dan stabil berkat penantian status diam bawaan. UI Automator adalah framework untuk pengujian lintas aplikasi yang dapat berinteraksi dengan elemen sistem (dialog izin, bayangan notifikasi).
Detox adalah framework E2E kotak abu-abu untuk menguji aplikasi seluler React Native dari Wix. Detox bekerja di kedua platform dari satu basis kode pengujian, menggunakan Espresso (Android) dan XCUITest (iOS) di dalamnya. Detox secara otomatis menunggu aplikasi menjadi idle (tanpa animasi, permintaan jaringan, pengatur waktu) dan baru kemudian melakukan tindakan berikutnya.
Appium adalah framework lintas platform universal yang mendukung Android, iOS, Web, dan aplikasi hybrid. Appium menggunakan protokol WebDriver dan mendukung bahasa pemrograman apa pun (Java, Python, JS, Ruby). Server Appium bekerja sebagai server HTTP yang menerjemahkan perintah menjadi perintah UI Automator / XCUITest asli. Kelemahan utama Appium adalah kecepatan: pengujian berjalan lebih lambat daripada Espresso atau XCUITest asli.
| Kriteria | iOS | Android |
|---|---|---|
| Pengujian unit | XCTest | JUnit 4/5 + Mockito |
| Pengujian UI | XCUITest | Espresso, UI Automator |
| Pengujian snapshot | FBSnapshotTestCase | Shot, Roborazzi |
| Otomatisasi gerakan | XCUIGesture | UiAutomator touch |
| Cakupan kode | Xcode Code Coverage | Jacoco |
| Integrasi CI | xcodebuild test | Gradle connectedCheck |
TDD adalah metodologi pengujian aplikasi seluler di mana pengujian ditulis sebelum kode implementasi. Siklus Red-Green-Refactor: (1) tulis pengujian yang gagal (Red), (2) tulis kode minimal agar pengujian lolos (Green), (3) refaktor kode sambil mempertahankan pengujian lolos. TDD memberikan cakupan pengujian 100% untuk fungsionalitas baru dan arsitektur yang bersih, karena pengujian adalah spesifikasi pertama dari persyaratan.
BDD adalah perluasan dari TDD di mana pengujian ditulis dalam bahasa alami dalam format Given-When-Then. Given (konteks) — When (tindakan) — Then (hasil yang diharapkan). Pengujian BDD dapat dipahami oleh semua anggota tim: pengembang, penguji, analis, dan klien. Mock vs Stub vs Fake: Mock memverifikasi interaksi (apakah metode dipanggil), Stub mengembalikan data tetap, Fake adalah implementasi kerja yang disederhanakan (misalnya, DB dalam memori). Di IT Sectr, kami menggunakan TDD untuk logika bisnis kritis dan BDD untuk skenario penerimaan.
Test Doubles adalah nama umum untuk objek yang menggantikan dependensi nyata dalam pengujian. Ada empat jenis: Dummy (objek untuk mengisi parameter, tidak digunakan), Stub (mengembalikan nilai yang diberikan), Spy (merekam panggilan untuk verifikasi), Mock (mendefinisikan panggilan yang diharapkan sebelumnya). Memahami perbedaan sangat penting untuk desain pengujian yang tepat.
CI/CD — Integrasi Berkelanjutan dan Pengiriman Berkelanjutan: praktik membangun dan menguji aplikasi seluler secara otomatis pada setiap perubahan kode. Dalam pengembangan seluler, pipeline CI/CD mencakup: linting, pengujian unit, pengujian integrasi, build APK/IPA, dan pengujian UI. GitHub Actions dan Bitrise adalah platform populer untuk CI/CD seluler. Pengujian harus berjalan cepat: pengujian unit dalam 1–2 menit, integrasi dalam 5–10, UI dalam 15–30 menit.
Device Farm adalah kumpulan perangkat nyata untuk pengujian. Firebase Test Lab (Android) dan Xcode Cloud (iOS) menyediakan akses cloud ke ratusan model perangkat. Device Farm mengungkap masalah yang tidak terlihat di emulator: ukuran layar berbeda, kinerja pada perangkat lama, masalah kompatibilitas. Di IT Sectr, kami menggunakan Firebase Test Lab untuk Android dan Xcode Cloud untuk iOS secara teratur.
Pertanyaan Umum
Untuk proyek komersial, setidaknya 70–80% cakupan logika bisnis. Kode UI lebih sulit dicakup — 50% sudah cukup. Yang penting bukan persentasenya, melainkan kualitas pengujian: uji skenario kritis, kasus batas, dan penanganan kesalahan.
Mock memverifikasi interaksi — apakah metode tertentu dipanggil dengan parameter tertentu. Stub mengembalikan data yang telah ditentukan sebelumnya. Mock memeriksa perilaku, Stub memeriksa keadaan.
Ya, tetapi hanya untuk skenario kritis: login, registrasi, penyelesaian pesanan, pembayaran. Pengujian UI lambat dan rapuh — jangan menulis pengujian untuk setiap layar. Fokus pada skenario E2E pengguna.
Snapshot Test (Golden Test) membandingkan komponen UI yang dirender dengan gambar referensi. Jika tampilan berubah (font, padding, warna), pengujian gagal — pengembang memeriksa apakah perubahan itu disengaja. Ideal untuk pustaka komponen.
Jalankan pengujian E2E secara paralel di beberapa perangkat, gunakan Cloud Device Farm, dan bagi pengujian menjadi kelompok independen. Optimalkan pengujian: minimalkan penantian, gunakan mock untuk permintaan jaringan.
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.