Saya bekerja dengan banyak aplikasi web yang digerakkan oleh basis data dengan berbagai kompleksitas di backend. Biasanya, ada lapisan ORM yang terpisah dari logika bisnis dan presentasi. Ini membuat unit-test logika bisnis cukup mudah; hal-hal dapat diimplementasikan dalam modul diskrit dan data apa pun yang diperlukan untuk pengujian dapat dipalsukan melalui objek yang mengejek.
Tetapi menguji ORM dan database itu sendiri selalu penuh dengan masalah dan kompromi.
Selama bertahun-tahun, saya telah mencoba beberapa strategi, tidak ada yang benar-benar memuaskan saya.
Memuat database uji dengan data yang diketahui. Jalankan tes terhadap ORM dan konfirmasikan bahwa data yang tepat kembali. Kerugiannya di sini adalah bahwa DB pengujian Anda harus mengikuti perubahan skema dalam database aplikasi, dan mungkin tidak sinkron. Itu juga bergantung pada data buatan, dan mungkin tidak mengekspos bug yang terjadi karena input pengguna yang bodoh. Akhirnya, jika database pengujian kecil, itu tidak akan mengungkapkan inefisiensi seperti indeks yang hilang. (Oke, yang terakhir itu sebenarnya bukan unit pengujian yang seharusnya digunakan, tetapi tidak sakit.)
Muat salinan database produksi dan uji terhadap itu. Masalahnya di sini adalah bahwa Anda mungkin tidak tahu apa yang ada di DB produksi pada waktu tertentu; tes Anda mungkin perlu ditulis ulang jika data berubah seiring waktu.
Beberapa orang telah menunjukkan bahwa kedua strategi ini bergantung pada data tertentu, dan unit test hanya menguji fungsionalitas. Untuk itu, saya telah melihat saran:
- Gunakan server database tiruan, dan periksa hanya bahwa ORM mengirim pertanyaan yang benar sebagai tanggapan terhadap panggilan metode yang diberikan.
Strategi apa yang telah Anda gunakan untuk menguji aplikasi berbasis database, jika ada? Apa yang terbaik untuk Anda?