Saya memiliki banyak kesempatan baru-baru ini di mana saya harus memelihara prosedur dan fungsi yang tersimpan kompleks. Ini sudah rusak, biasanya dalam cara yang cukup halus - ada beberapa kesempatan di mana Anda akan memanggil SP dengan parameter yang valid dan itu hanya tidak berfungsi.
Solusi saya adalah mengembangkan kerangka kerja yang mengeksekusi prosedur tersimpan di dalam transaksi, setelah menginisialisasi database ke kondisi awal yang saya butuhkan, kemudian menguji untuk hasil yang diharapkan, juga dalam transaksi yang sama. Transaksi dibatalkan pada akhir tes.
Ini telah bekerja dengan sangat baik. Tetapi beberapa orang akan menyebutnya "pengujian integrasi" karena melibatkan integrasi dengan database. Saya menyebutnya unit testing, karena saya menguji masing-masing komponen dan kasus uji individual untuk komponen-komponen itu, dan karena saya sepenuhnya mengendalikan keadaan awal basis data.
Tapi di mana garis harus ditarik? Apakah ini pengujian integrasi atau pengujian unit? Adakah alasan praktis mengapa tes semacam ini adalah ide yang buruk? Jika ini "hanya" pengujian integrasi, apakah ada yang punya saran tentang bagaimana melakukan "unit test" yang sebenarnya pada prosedur yang tersimpan ini?
Perbarui, 3 1/2 tahun kemudian. Pada proyek saya saat ini, saya sudah mulai menggunakan tes unit SSDT, dengan sukses, meskipun mereka bisa lebih baik. Lihat Memverifikasi Kode Basis Data dengan Menggunakan Tes Unit SQL Server . Ini biasanya menyebarkan proyek database ke instance Anda dari SQL Server LocalDB, jadi ini menghilangkan pertanyaan tentang lingkungan database yang mempengaruhi pengujian. Saya mengisi database dengan data yang diperlukan selama Pra-Tes, yang menghilangkan pertanyaan tentang konten database. Bahkan, saya menggunakan pernyataan MERGE untuk melakukan ini, memastikan bahwa data apa pun yang saya tidak perlukan untuk pengujian saat ini dihapus, dimasukkan atau diperbarui dari database sebelum pengujian. Mereka memang memiliki masalah:
- Mereka tidak cepat
- Tidak mungkin menggunakan kembali kondisi pengujian
- Tidak mungkin untuk menggunakan kembali pra-tes (kecuali jika Anda membuatnya umum untuk semua tes dalam suatu proyek)
- Antarmuka pengguna dapat ditingkatkan
Salah satu alasan untuk masalah di atas adalah bahwa saya belum mengeluh tentang mereka. Saya sarankan siapa pun yang tertarik harus mencoba fitur ini, dan kemudian mengeluh tentang hal itu. Begitulah cara perbaikan dilakukan.