Unit Testing vs Integration Testing: Perbedaan dan Contohnya

Dalam pengembangan software, memastikan program berjalan dengan benar merupakan hal yang penting. Programmer tidak hanya perlu menulis kode, tetapi juga harus menguji apakah setiap bagian aplikasi bekerja sesuai kebutuhan.

Dua jenis pengujian yang sering digunakan adalah unit testing dan integration testing. Keduanya membantu menemukan kesalahan dalam program, tetapi memiliki fokus dan cakupan yang berbeda.

Unit testing berfokus pada pengujian bagian kecil kode secara terpisah, sedangkan integration testing memeriksa apakah beberapa bagian program dapat bekerja sama dengan baik.

Lalu, apa perbedaan unit testing dan integration testing? Kapan masing-masing pengujian digunakan? Simak penjelasan berikut.

Apa Itu Unit Testing?

Unit testing adalah proses menguji bagian kecil dari program secara terpisah untuk memastikan bagian tersebut menghasilkan output sesuai yang diharapkan.

Bagian yang diuji dapat berupa:

  • Function.
  • Method.
  • Class.
  • Modul tertentu.
  • Komponen dengan tanggung jawab yang terbatas.

Tujuan unit testing adalah menemukan kesalahan pada bagian kode secara lebih terarah sebelum bagian tersebut digunakan bersama komponen lainnya.

Contoh Unit Testing dengan Python

Misalnya, programmer membuat function untuk menjumlahkan dua angka.

def tambah(a, b):
    return a + b

Function tersebut dapat diuji menggunakan assert.

def test_tambah():
    assert tambah(2, 3) == 5

Pengujian tersebut memeriksa apakah function tambah() menghasilkan nilai 5 ketika menerima angka 2 dan 3.

Jika hasil yang diperoleh tidak sesuai dengan nilai yang diharapkan, pengujian akan gagal.

Contoh Beberapa Skenario Unit Test

def test_tambah():
    assert tambah(2, 3) == 5
    assert tambah(0, 5) == 5
    assert tambah(-2, 2) == 0

Skenario tersebut menguji beberapa kombinasi input untuk function yang sama.

Unit testing sebaiknya berfokus pada satu unit logika dan menghindari ketergantungan yang tidak diperlukan pada komponen eksternal.

Apa Itu Integration Testing?

Integration testing adalah proses menguji interaksi antara dua atau lebih komponen program untuk memastikan komponen tersebut dapat bekerja sama sesuai kebutuhan.

Komponen yang diuji dapat berupa:

  • Function dan database.
  • Backend dan API.
  • Modul autentikasi dan sistem pengguna.
  • Aplikasi dan layanan eksternal.
  • Modul transaksi dan sistem penyimpanan data.

Integration testing tidak hanya memeriksa apakah setiap bagian bekerja sendiri, tetapi juga apakah pertukaran data dan komunikasi antarbagian berjalan dengan benar.

Contoh Integration Testing

Misalnya sebuah aplikasi memiliki fitur login dengan alur berikut:

Form Login
    ↓
Backend
    ↓
Database
    ↓
Validasi Data Pengguna
    ↓
Hasil Login

Unit testing dapat digunakan untuk menguji function validasi password secara terpisah.

Sementara itu, integration testing dapat memeriksa apakah:

  1. Form mengirim data ke backend.
  2. Backend terhubung dengan database.
  3. Data pengguna dapat diambil.
  4. Password diverifikasi dengan benar.
  5. Sistem mengembalikan hasil login yang sesuai.

Pengujian tersebut melibatkan beberapa komponen yang saling berinteraksi.

Perbedaan Unit Testing dan Integration Testing

Berikut perbandingan unit testing dan integration testing:

AspekUnit TestingIntegration Testing
FokusBagian kecil kodeInteraksi beberapa komponen
CakupanSempit dan terisolasiLebih luas
TujuanMemastikan unit bekerja benarMemastikan komponen dapat bekerja sama
KecepatanBiasanya lebih cepatDapat lebih lambat
DependensiUmumnya diminimalkan atau diisolasiDependensi antarkomponen diuji
ContohMenguji function penjumlahanMenguji backend yang mengambil data dari database
Kesalahan yang ditemukanKesalahan logika dalam unitKesalahan komunikasi dan integrasi

Kesimpulan perbedaan: Unit testing menguji bagian program secara terpisah, sedangkan integration testing menguji hubungan dan interaksi antarbagian program.

Perbedaan dari Segi Tujuan

Tujuan Unit Testing

Unit testing bertujuan untuk memastikan sebuah unit kode menjalankan tugasnya secara benar.

Contohnya:

  • Function menghitung total menghasilkan nilai yang tepat.
  • Method validasi mengembalikan hasil yang benar.
  • Modul perhitungan diskon mengikuti aturan yang ditentukan.

Tujuan Integration Testing

Integration testing bertujuan untuk memastikan komponen yang berbeda dapat berkomunikasi dan bekerja sesuai alur yang dirancang.

Contohnya:

  • Backend berhasil mengambil data dari database.
  • Modul pembayaran dapat mengirim hasil transaksi.
  • API mengirim data dengan format yang dapat diproses frontend.

Contoh Unit Testing pada Aplikasi Penjualan

Misalnya terdapat function untuk menghitung total harga barang.

def hitung_total(harga, jumlah):
    return harga * jumlah

Unit testing dapat dilakukan seperti berikut:

def test_hitung_total():
    assert hitung_total(10000, 3) == 30000
    assert hitung_total(5000, 2) == 10000

Pada contoh tersebut, function diuji tanpa menghubungkan aplikasi ke database atau sistem pembayaran.

Apa yang Diperiksa?

  • Perkalian harga dan jumlah.
  • Input dengan jumlah berbeda.
  • Hasil perhitungan sesuai harapan.

Pengujian ini berfokus pada logika perhitungan total.

Contoh Integration Testing pada Aplikasi Penjualan

Aplikasi penjualan biasanya melibatkan beberapa komponen:

Form Penjualan
      ↓
Validasi Input
      ↓
Proses Transaksi
      ↓
Database
      ↓
Pembaruan Stok

Integration testing dapat memeriksa apakah proses transaksi dapat berjalan secara lengkap.

Contoh skenario:

  1. Pengguna memilih barang.
  2. Aplikasi mengambil harga barang dari database.
  3. Pengguna memasukkan jumlah pembelian.
  4. Sistem menghitung total transaksi.
  5. Data transaksi disimpan.
  6. Stok barang diperbarui.

Pengujian ini dapat menemukan masalah yang tidak terlihat ketika masing-masing function diuji secara terpisah.

Misalnya, function perhitungan total bekerja dengan benar, tetapi data harga dari database ternyata tidak dipetakan ke variabel yang sesuai.

Contoh Integration Testing pada PHP dan MySQL

Pada aplikasi PHP, integration testing dapat digunakan untuk memeriksa interaksi antara kode PHP dan database MySQL.

Contoh alur:

Form Tambah Barang
        ↓
File tambah.php
        ↓
Validasi Data
        ↓
Query INSERT
        ↓
Database MySQL

Skenario pengujian:

SkenarioHasil yang Diharapkan
Menambahkan barang dengan data validData tersimpan di database
Nama barang kosongValidasi ditampilkan
Harga tidak validData ditolak
Koneksi database gagalPesan error ditangani
Data berhasil disimpanHasil penyimpanan ditampilkan sesuai kebutuhan

Pengujian ini melibatkan lebih dari satu komponen sehingga termasuk dalam cakupan integration testing.

Catatan: Pengujian yang benar-benar menyimpan data ke database sebaiknya menggunakan database pengujian atau data yang telah disiapkan agar tidak merusak data produksi.

Unit Testing Menggunakan Mock dan Stub

Dalam unit testing, dependensi eksternal sering diganti dengan objek pengganti seperti mock atau stub.

Tujuannya adalah membuat unit dapat diuji tanpa harus bergantung langsung pada layanan eksternal.

Apa Itu Mock?

Mock adalah objek pengganti yang dapat digunakan untuk mengatur perilaku dependensi dan memeriksa interaksi yang dilakukan oleh kode.

Apa Itu Stub?

Stub adalah implementasi pengganti yang menyediakan respons tertentu selama pengujian.

Contohnya, function yang biasanya mengambil data dari API dapat diuji menggunakan respons palsu sehingga unit tidak perlu mengakses API sungguhan.

Penggunaan mock dan stub bergantung pada kebutuhan pengujian dan framework yang digunakan.

Kapan Menggunakan Unit Testing?

Unit testing cocok digunakan ketika programmer ingin:

  1. Menguji function atau method secara terpisah.
  2. Memeriksa logika bisnis yang kecil.
  3. Menemukan bug lebih awal.
  4. Menjalankan pengujian dengan cepat.
  5. Memastikan perubahan kode tidak merusak logika unit.
  6. Menguji berbagai kombinasi input dan output.

Contoh bagian yang cocok untuk unit testing:

def hitung_diskon(harga, persen):
    return harga * persen / 100

Function tersebut dapat diuji dengan beberapa nilai tanpa harus menjalankan keseluruhan aplikasi.

Kapan Menggunakan Integration Testing?

Integration testing cocok digunakan ketika programmer ingin:

  1. Memeriksa hubungan antar-modul.
  2. Menguji komunikasi aplikasi dengan database.
  3. Memastikan API dan backend bertukar data dengan benar.
  4. Menguji alur transaksi yang melibatkan beberapa komponen.
  5. Memastikan konfigurasi dependensi bekerja sesuai kebutuhan.
  6. Menemukan masalah yang tidak muncul saat unit diuji secara terpisah.

Contoh:

Aplikasi
   ↓
Service
   ↓
Repository
   ↓
Database

Pengujian dapat memeriksa apakah data berhasil mengalir melalui komponen tersebut sesuai rancangan.

Unit Testing dan Integration Testing dalam Pengembangan Website

Pada pengembangan website, kedua jenis pengujian dapat digunakan secara bersamaan.

Unit Testing Frontend

Contoh bagian yang dapat diuji:

  • Function validasi form.
  • Perhitungan total pada keranjang belanja.
  • Komponen tombol.
  • Fungsi pemformatan data.

Integration Testing Frontend

Contoh:

  • Form mengirim data ke API.
  • Komponen menampilkan data yang diterima dari backend.
  • Proses login mengubah tampilan aplikasi sesuai respons server.

Unit Testing Backend

Contoh:

  • Validasi input.
  • Perhitungan biaya.
  • Logika diskon.
  • Pemeriksaan status transaksi.

Integration Testing Backend

Contoh:

  • Backend berkomunikasi dengan database.
  • API memproses request dan menghasilkan response.
  • Modul transaksi menyimpan data serta memperbarui stok.

Apakah Unit Testing Lebih Baik daripada Integration Testing?

Unit testing dan integration testing memiliki tujuan yang berbeda sehingga tidak dapat diperlakukan sebagai pengganti satu sama lain.

Unit testing membantu memeriksa logika bagian kecil program, sedangkan integration testing membantu memeriksa interaksi antarbagian.

Dalam banyak proyek, keduanya digunakan sebagai bagian dari strategi pengujian yang lebih luas.

Contoh pembagian pengujian:

Unit Testing
    ↓
Integration Testing
    ↓
System Testing
    ↓
Acceptance Testing

Urutan tersebut merupakan ilustrasi umum. Dalam praktiknya, strategi dan urutan pengujian dapat disesuaikan dengan arsitektur aplikasi, metode pengembangan, dan kebutuhan proyek.

Tools untuk Unit Testing dan Integration Testing

Berikut beberapa tools yang dapat digunakan:

Bahasa / PlatformTools
Pythonunittest, pytest
PHPPHPUnit
JavaJUnit
JavaScriptJest, Vitest
.NETxUnit, NUnit
APIPostman, Newman
Web browserPlaywright, Selenium

Tidak semua tools hanya digunakan untuk satu jenis pengujian. Cakupan penggunaannya bergantung pada konfigurasi dan cara test dibuat.

Contoh Framework pytest

Instalasi:

pip install pytest

File program:

def tambah(a, b):
    return a + b

File pengujian:

def test_tambah():
    assert tambah(2, 3) == 5

Pengujian dapat dijalankan menggunakan:

pytest

Untuk integration testing, pytest juga dapat digunakan bersama fixture dan konfigurasi dependensi yang sesuai.

Kesalahan yang Sering Terjadi Saat Testing

1. Hanya Menguji Function Secara Terpisah

Unit yang berhasil diuji belum tentu dapat bekerja dengan benar ketika digabungkan dengan komponen lain.

2. Tidak Menguji Integrasi Database

Aplikasi yang berhubungan dengan database perlu diuji pada proses pengambilan, penyimpanan, dan pembaruan data sesuai kebutuhan.

3. Menggunakan Data Produksi Saat Pengujian

Pengujian dengan data produksi dapat menimbulkan risiko perubahan atau kehilangan data. Gunakan lingkungan pengujian yang sesuai.

4. Tidak Memeriksa Format Data

Perbedaan struktur data antara frontend, backend, dan database dapat menyebabkan kesalahan integrasi.

5. Tidak Menjalankan Pengujian Setelah Perubahan

Perubahan pada satu komponen dapat memengaruhi komponen lain. Pengujian ulang perlu dilakukan berdasarkan risiko perubahan tersebut.

Tips Menerapkan Unit dan Integration Testing

Berikut beberapa tips untuk programmer pemula:

  1. Mulai dengan menguji function sederhana.
  2. Tentukan input dan output yang diharapkan.
  3. Pisahkan unit testing dari dependensi eksternal jika diperlukan.
  4. Gunakan mock atau stub untuk unit yang membutuhkan dependensi.
  5. Buat integration test untuk alur antar-komponen.
  6. Gunakan database pengujian untuk test yang melibatkan data.
  7. Uji kondisi normal dan kondisi error.
  8. Jalankan test secara rutin setelah perubahan kode.
  9. Gunakan nama test yang jelas.
  10. Catat dan analisis hasil pengujian yang gagal.

Kesimpulan

Unit testing dan integration testing sama-sama penting dalam pengembangan software, tetapi memiliki fokus yang berbeda. Unit testing menguji bagian kecil program secara terpisah, sedangkan integration testing memeriksa interaksi antara beberapa komponen.

Unit testing membantu menemukan kesalahan pada logika function atau method, sementara integration testing dapat menemukan masalah komunikasi antara backend, database, API, dan modul lainnya.

Dengan menggabungkan kedua pendekatan secara tepat, programmer dapat menguji program secara lebih terarah dan meningkatkan kepercayaan terhadap perilaku aplikasi.

Leave a Reply

Your email address will not be published. Required fields are marked *