Stubbing database interaction in Go

Yusuf Sholeh
PPL A-4 YUK RECYCLE
2 min readMar 20, 2019

Meneruskan perihal testing dari blog sebelumnya, kali ini saya akan menjelaskan apa itu stub dan contoh implementasinya dalam golang.

Latar Belakang Permasalahan

Saat pembuatan unit test, beberapa dari kita pernah menemui objek atau fungsi yang berinteraksi dengan eksternal. Beberapa contohnya yaitu:

  1. Interaksi dengan database, yaitu operasi-operasi CRUD terhadap database.
  2. Email posting, yaitu ketika menggunakan servis untuk mengirimkan email.

Untuk pembuatan test, hal ini tidak mungkin jika di-mock karena kita tidak punya kontrol penuh terhadap behaviour dari objek atau fungsi yang dipanggil. Solusi untuk pembuatan test untuk kasus ini yaitu membuat environment buatan yang behaviournya sama seperti eksternal. Environment buatan yang dimaksud adalah mendefinisikan terlebih dahulu behaviour-behaviournya sebelum test dimulai. Environment ini dinamakan stub.

Pembuatan Stubs Database dalam Go

Saya akan menjelaskan apa yang sudah saya kerjakan pada sprint kali ini. Bayangkan terdapat sebuah tabel bernama mitra dalam sebuah database. Kolom pada tabel tersebut yaitu id, phone, email, dan password. Tabel tersebut direpresentasikan dengan Class ORM pada Go. Misalkan class tersebut mempunyai method mengambil record pada tabel tersebut berdasarkan phone, seperti pada kode dibawah ini:

SQL Query GetByPhoneNumber: SELECT * FROM Mitra Where Phone = ‘phone’.

Untuk mengetes method GetByPhoneNumber(), kita perlu membuat environment database (postgre driver) dan tabel Mitra beserta isi recordnya. Tabel mitra didefinisikan dengan field id, phone, email dan password, serta saya insert sebuah row dengan email “abdul@gmail.com’’, phone “0812345678”, password “abcdefghi” sesuai pada kode berikut:

Sampai pada tahap ini, preparasi stub telah selesai. Artinya sekarang sudah siap untuk melakukan query terhadap database, ditambah dengan assert:

Assert dilakukan untuk pengecekan pada saat melakukan query ‘where phone = 0812345678’. Seharusnya query tersebut mengembalikan record seperti yang sudah kita simpan di dalam database, yaitu email berisi “abdul@gmail.com” dan password berisi “abcdefghi”.

Setelah itu jalankan testnya:

test passed.

Sekian, semoga bermanfaat.

--

--