Pendahuluan

Istilah Test Double muncul dari buku Gerard Meszaros yang berjudul XUnit Test Pattern, Refactoring Test Code yang diterbitkan pada May 2007.

Test Double ini adalah istilah baru yang dimunculkan oleh Gerard Meszaros sebagai kategori umum untuk jenis-jenis object yang digunakan untuk testing, yaitu :

  • objek Dummy
  • objek Fake
  • objek Stub
  • objek Spy
  • objek Mock.

Test Double mengacu kepada 5 jenis object testing diatas.


Kenapa namanya Test Double ?

Istilah Test Double ini meminjam istilah dari dunia perfilm-an. Di dunia perfilm-an, terdapat istilah Stunt Double yaitu untuk seseorang yang menggantikan posisi aktor utamanya dalam melakukan aksi-aksi yang berbahaya.

Stunt sendiri berarti aksi yang berbahaya, Double mengacu kepada 2 orang yang semirip yang melakukannya. Tetapi Stunt Double mengacu kepada orang pengganti tersebut.


Apa sebenarnya konsep Test Double ?

Test Double ini seperti Stunt Double, yaitu fungsinya untuk menggantikan objek yang kita butuhkan ketika unit testing.

Contoh objek yang kita butuhkan, misalnya :

  • Objek koneksi database.
  • Objek untuk mengakses API.
  • Objek utilitas untuk membantu pemrosesan.
  • Object komunikasi dengan sistem lain.
  • dll.

Di dalam istilahnya Gerard Meszaros, objek-objek tersebut dinamakan Collaborator, yaitu komponen yang dibutuhkan dari sebuah program.

Misalnya kita mempunyai code/program dalam class Order Service di sebuah aplikasi e-commerce.

Class Order Service ini didalamnya mempunyai ketergantungan terhadap :

  • Koneksi ke database Order di database
  • Pemanggilan ke microservice lain seperti Stock Service untuk mengecek ketersediaan stok.
  • Pemanggilan ke smtp server untuk email.
  • dll

Semua objek ketergantungan diatas disebut sebagai collaborator.

Lalu fungsi Test Double di mana ?

Test Double berfungsi menggantikan objek collaborator diatas.

Terlalu beresiko dan terlalu sulit ketika kita menggunakan objek collaborator asli ketika kita ingin mengetes perilaku dari Order Service diatas.

Oleh karenanya perlu dilakukan peniruan dengan menggunakan objek Dummy, Fake, Stub, Spy, atau Mock untuk masing-masing objek collaborator diatas, sehingga unit testing kita tidak tergantung dengan sistem di luar objek yang mau kita testing.

Pada unit testing, Test Double adalah pengganti (sama seperti stunt double) dari collaborator.

Objek Test Double tidak harus berperilaku sama dengan perilaku collaborator. Tetapi kita bisa memisalkan dan meniru apa saja yang perlu di sama kan dengan objek collaborator aslinya dan apa yang tidak.

Tujuan Test Double adalah untuk meniru objek asli dari collaborator agar objek yang kita ingin test fungsionalitas nya berperilaku seperti ia berinteraksi dengan objek collaborator yang asli.