Kenapa Perlu Mock dalam Testing
Kenapa Perlu Mock dalam Testing?
Daftar Isi
- 1. Pengantar
- 2. Alasan Kenapa Mock Diperlukan
- 3. Contoh Kasus Tanpa Mock
- 4. Contoh Kasus Dengan Mock
- 5. Manfaat Menggunakan Mock
- 6. Mock di Laravel
- 7. Kesimpulan
1. Pengantar
Saat menulis unit test, kita hanya ingin menguji satu bagian logika saja — bukan keseluruhan sistem. Masalahnya, kadang logika itu bergantung pada service lain seperti database, email, atau API. Nah, di sinilah mock berperan.
2. Alasan Kenapa Mock Diperlukan
- Menghindari ketergantungan eksternal: Misalnya server API sedang down, testing tetap jalan.
- Menguji skenario khusus: Seperti respon gagal dari payment gateway.
- Lebih cepat: Tidak butuh koneksi database, API, atau filesystem.
- Lebih aman: Tidak akan mengirim email sungguhan atau menyimpan file asli saat testing.
- Isolasi logika: Fokus pada satu fungsi/metode tanpa efek samping dari class lain.
3. Contoh Kasus Tanpa Mock
// Service Asli
class PaymentService {
public function charge($user, $amount) {
// Terhubung ke payment gateway
}
}
class OrderController {
public function checkout(Request $request) {
$payment = new PaymentService();
$payment->charge(auth()->user(), 100000);
}
}
Kalau kamu test class OrderController
seperti ini, kamu akan benar-benar menjalankan transaksi ke payment gateway — tidak efisien dan berisiko.
4. Contoh Kasus Dengan Mock
$mock = \Mockery::mock(PaymentService::class);
$mock->shouldReceive('charge')->once()->with($user, 100000);
$this->app->instance(PaymentService::class, $mock);
$response = $this->actingAs($user)->post('/checkout');
$response->assertStatus(200);
Dengan mock, kamu bisa menguji bahwa fungsi charge()
dipanggil dengan benar, tanpa benar-benar membayar.
5. Manfaat Menggunakan Mock
- Mengontrol alur testing dengan prediksi hasil dari method yang dimock.
- Mengetahui apakah fungsi dipanggil, berapa kali, dan dengan argumen apa.
- Menghindari dependensi mahal seperti database, API, filesystem, email server, dll.
6. Mock di Laravel
Laravel punya banyak fitur untuk mocking secara built-in, contohnya:
Mail::fake()
– Cegah email asli terkirimHttp::fake()
– Mock HTTP requestEvent::fake()
– Cegah event listener dijalankanQueue::fake()
– Cegah job dikirim ke queue
Contoh Mocking Email:
Mail::fake();
$this->post('/register', [
'name' => 'Test',
'email' => 'test@example.com',
]);
Mail::assertSent(WelcomeMail::class);
7. Kesimpulan
Mock sangat penting dalam unit testing karena membantu kita menguji bagian kecil dari sistem tanpa tergantung pada hal-hal eksternal. Dengan mock, testing jadi lebih cepat, stabil, dan mudah dikontrol. Laravel sudah menyediakan berbagai fitur mock siap pakai untuk mempercepat pengembangan dan pengujian aplikasi.
0 comments :
Post a Comment