Apa itu Mock dalam Testing


Apa itu Mock dalam Testing?

Daftar Isi

  1. 1. Pengertian Mock dalam Testing
  2. 2. Tujuan Penggunaan Mock
  3. 3. Mock vs Real Object
  4. 4. Contoh Penggunaan Mock
  5. 5. Framework Testing yang Mendukung Mock
  6. 6. Penggunaan Mock dalam Laravel
  7. 7. Kesimpulan

1. Pengertian Mock dalam Testing

Mock adalah objek tiruan (simulasi) yang dibuat untuk meniru perilaku objek asli dalam pengujian perangkat lunak. Mock digunakan dalam pengujian unit (unit testing) untuk menggantikan dependensi eksternal atau bagian lain dari sistem yang tidak sedang diuji secara langsung.

2. Tujuan Penggunaan Mock

  • Mengisolasi kode yang diuji: Fokus hanya pada satu bagian logika tanpa melibatkan dependensi nyata.
  • Meningkatkan kecepatan testing: Karena tidak perlu memanggil database, API, atau komponen lain yang lambat.
  • Mencegah efek samping: Seperti insert ke database, kirim email, atau request ke layanan pihak ketiga.
  • Memudahkan simulasi skenario ekstrem: Seperti error dari server, timeout API, dll.

3. Mock vs Real Object

Aspek Real Object Mock Object
Asli / Tiruan Objek nyata yang berinteraksi dengan sistem lain Tiruan yang dibuat untuk testing saja
Kecepatan Lambat (bisa akses database, API) Cepat karena hanya simulasi
Kontrol Output Output tergantung kondisi nyata Output bisa ditentukan sesuai kebutuhan test

4. Contoh Penggunaan Mock

Misalnya kita punya class untuk mengirim email, dan kita ingin menguji metode `registerUser` tanpa benar-benar mengirim email:

// Kode asli
class EmailService {
    public function sendWelcome($email) {
        // Mengirim email sungguhan
    }
}

class UserService {
    protected $emailService;

    public function __construct(EmailService $emailService) {
        $this->emailService = $emailService;
    }

    public function registerUser($user) {
        // Simpan user ke DB
        $this->emailService->sendWelcome($user->email);
    }
}

Kode testing dengan mock (misalnya pakai PHPUnit):

$mockEmailService = $this->createMock(EmailService::class);
$mockEmailService->expects($this->once())
                 ->method('sendWelcome')
                 ->with('user@example.com');

$userService = new UserService($mockEmailService);
$user = (object)['email' => 'user@example.com'];
$userService->registerUser($user);

Pada contoh di atas, kita tidak benar-benar mengirim email — hanya mengecek apakah method `sendWelcome` dipanggil dengan parameter yang benar.

5. Framework Testing yang Mendukung Mock

  • PHPUnit – Paling populer untuk PHP, termasuk fitur built-in untuk mocking.
  • Mockery – Library mocking tambahan yang lebih fleksibel untuk PHP.
  • Jest – Untuk JavaScript/Node.js.
  • Mockito – Untuk Java dan Kotlin.
  • Sinon.js – Untuk mocking dan spy di JavaScript.

6. Penggunaan Mock dalam Laravel

Laravel memiliki dukungan mock yang sangat baik, terutama jika kamu menggunakan Pest atau PHPUnit. Selain itu, Laravel juga mendukung:

  • Http::fake() – Untuk mock HTTP request.
  • Mail::fake() – Untuk mock pengiriman email.
  • Queue::fake() – Untuk mock job antrian.
  • Event::fake() – Untuk testing event listener tanpa benar-benar menjalankannya.

Contoh:

Mail::fake();

$user = User::factory()->create();
Notification::route('mail', $user->email)->notify(new WelcomeNotification());

Mail::assertSent(WelcomeNotification::class);

7. Kesimpulan

Mock adalah teknik penting dalam testing untuk mensimulasikan bagian dari sistem yang tidak sedang diuji secara langsung. Dengan menggunakan mock, pengujian bisa lebih cepat, lebih aman, dan lebih fokus. Laravel dan PHPUnit menyediakan alat yang sangat powerful untuk membuat dan mengelola mock dalam testing aplikasi.

0 comments :

Post a Comment