Silahkan baca lagi mengenai Test Double dan Jenis Test Double untuk pemahaman lebih lengkap

Pendahuluan

Kalau sebelumnya kita sudah tahu mengenai Test Double, maka sekarang kita akan melihat salah satu dari jenis Test Double itu yaitu Objek Dummy

Objek Dummy adalah objek tiruan yang dibuat untuk meminimalkan ketergantungan terhadap sebuah objek yang struktur objek nya mungkin rumit di dalamnya.

Contohnya

Seperti contoh artikel sebelumnya :

Misalkan objek AlamatService yang fungsinya berhubungan dengan Alamat. Akan tetapi objek Alamat hanya digunakan sebagai parameter objek AlamatService saja. Hanya butuh dipassing parameter ini ketika membuat/menginstansiasi objek AlamatService.

Struktur objek Alamat beserta tipe datanya adalah sebagai berikut :

  • Alamat
    • AlamatJalan
      • NamaJalan : String
      • NamaPerumahan : String
      • NomorRumah : Integer
    • Kelurahan : String
    • Kecamatan
      • key : String
      • value : String
    • Kotamadya/Kabupaten
      • key : String
      • value : String
    • Provinsi
      • key : String
      • value : String

Cukup kompleks ya ?

Ketika objek AlamatService ini membutuhkan objek Alamat, maka bisa saja kita harus membuat tiruan objek Alamat dengan cara mengisi dengan nilai data testing dari attribute objek Alamat seperti nilai AlamatJalan, Kecamatan, Provinsi yang masing-masing juga punya attribute di dalamnya.

Hal ini tentu sangat merepotkan dan tidak efektif.

Mestinya kita tidak butuh attribut-atribute dari Alamat. Wong tidak dibutuhkan kok sebenarnya. Yang kita butuhkan cuma parameter Alamat ini dipassing saja.

Tidak peduli isi didalamnya seperti apa, yang penting kasih gw objek Alamat apapun bentuknya.!!
Oleh karena kebutuhan itu, maka kita butuh namanya Objek Dummy

Konsep Unit Testing adalah Isolation Dependency, atau sebisa mungkin menyingkirkan objek-objek yang tidak berkaitan dengan Unit yang kita testing.

Begitu pula dengan objek Dummy untuk Alamat tadi. Misalnya dengan membuat sebuah constructor kosongan saja dari objek Alamat tersebut.

Atau kalau pun misalnya kita tidak bisa melakukan instansiasi terhadap objek Alamat tersebut karena alasan tertentu , maka kita bisa membuat objek Alamat dengan memanfaatkan prinsip Program to Interface, misalnya :


  • Kita definisikan sebuah interface untuk alamat, misalnya AlamatInterface.
  • Untuk objek aslinya kita buat class Alamat implements AlamatInterface.
  • Untuk objek asli unit yang kita testing, kita definisikan interface AlamatInterface sebagai collaborator.
    Dengan mendefinisikan interface, maka kita dengan mudah akan melakukan Dependency Injection dari implementasi mana saja. Tentunya untuk objek unit asli yang kita testing, yang kita Inject adalah objek Alamat.
  • Untuk unit testing, maka objek dummynya kita buat class AlamatDummy implements AlamatInterface.
  • Untuk objek testing unit yang kita testing, kita melakukan Dependency Injection objek AlamatDummy untuk attribute AlamatInterface

Coool…, sekarang kita mempunyai 2 class implementasi dari AlamatInterface.

Satunya dipakai untuk objek aslinya.

Satunya dipakai untuk keperluan testing.

Kedua-duanya memanfaatkan konsep Dependency Injection dan Program to Interface

Dengan memanfaatkan kedua hal tersebut, kita bisa membuat object Dummy untuk mengetes unit code/program yang kita buat.