Dari wawancara dengan Kent Beck dalam edisi Java Magazine terbaru:
Binstock: Mari kita bahas microservices. Tampaknya bagi saya bahwa tes-pertama pada layanan-layanan mikro akan menjadi rumit dalam arti bahwa beberapa layanan, untuk berfungsi, akan membutuhkan kehadiran sejumlah besar layanan lain. Apa kamu setuju?
Beck: Sepertinya sekelompok pertukaran yang sama tentang memiliki satu kelas besar atau banyak kelas kecil.
Binstock: Benar, kecuali saya kira, di sini Anda harus menggunakan banyak tiruan agar dapat mengatur sistem yang dengannya Anda dapat menguji layanan yang diberikan.
Beck: Saya tidak setuju. Jika gaya imperatif, Anda harus menggunakan banyak ejekan. Dalam gaya fungsional di mana ketergantungan eksternal dikumpulkan bersama-sama tinggi di rantai panggilan, maka saya tidak berpikir itu perlu. Saya pikir Anda bisa mendapatkan banyak liputan dari unit test.
Apa yang dia maksud Bagaimana gaya fungsional bisa membebaskan Anda dari mengejek ketergantungan eksternal?
Jawaban:
Sebuah fungsi murni adalah salah satu yang:
Misalkan kita sedang menulis beberapa kode untuk menangani login pengguna, di mana kita ingin memeriksa apakah nama pengguna dan kata sandi yang diberikan benar dan mencegah pengguna masuk jika ada terlalu banyak upaya gagal. Dalam gaya imperatif, kode kita mungkin terlihat seperti ini:
Cukup jelas bahwa ini bukan fungsi murni:
username
danpassword
kombinasi karena hasilnya juga tergantung pada catatan pengguna yang disimpan dalam database.Juga perhatikan bahwa untuk menguji unit fungsi ini kita perlu mengejek dua panggilan basis data,
FindUser
danRecordFailedLoginAttempt
.Jika kita memperbaiki kode ini menjadi gaya yang lebih fungsional kita mungkin berakhir dengan sesuatu yang sedikit seperti ini:
Perhatikan bahwa meskipun
UserLogin
fungsinya masih tidak murni,UserLoginPure
fungsi tersebut sekarang merupakan fungsi murni dan sebagai hasilnya logika otentikasi pengguna inti dapat diuji unit tanpa perlu mengejek setiap dependensi eksternal. Ini karena interaksi dengan basis data ditangani lebih tinggi dari tumpukan panggilan.sumber