Mengapa kita menulis objek tiruan saat menulis kasus uji unit?


11

Kami sedang menulis kasus uji unit di proyek kami. Implementasi untuk metode basis data ada dan berfungsi dengan baik. Dalam hal ini mengapa kita perlu menulis objek tiruan? Apakah ada alasan khusus? Mengapa saya tidak bisa menguji penerapan DAO secara langsung?

Jawaban:


6

Anda tidak boleh mengejek panggilan ke database karena itu akan mengalahkan tujuan. Apa yang Anda HARUS mengejek, misalnya, panggilan ke DAO Anda dari, katakanlah, lapisan layanan. Mengejek memungkinkan Anda untuk menguji metode secara terpisah.

Katakanlah Anda memiliki simulasi restoran dengan arsitektur seperti ini:

Cook <=> Server <=> Customer

Anda ingin menguji setiap lapisan secara independen. Inilah Serverlayer layanan Anda dan Cookdapat dianggap sebagai DAO. Ini Serveradalah apa yang ingin Anda tiru saat pengujian Customer, dan Cookapa yang ingin Anda tiru saat menguji Server. Namun, Cookunit ini harus memverifikasi bahwa implementasinya mengembalikan hamburger ketika hamburger dipesan dan bukan ban karet.


3
Saya tidak setuju dengan pernyataan Anda tidak boleh mengejek panggilan ke database karena itu akan mengalahkan tujuan. karena sepertinya terlalu generik. Seperti yang orang lain katakan di bawah ini, Anda perlu menguji semuanya secara terpisah. Jika yang Anda uji coba adalah akses basis data, tentu saja, komentar Anda benar. Jika hal yang Anda uji unit bukan akses basis data, maka kalimat pertama Anda salah. Saya setuju dengan semua yang Anda katakan. +0. :-)
Peter K.

6

Sangatlah baik untuk menguji businesslogic bersama dengan database. tetapi tes ini disebut tes integrasi bahkan jika Anda menggunakan nunit atau junit atau phpunit untuk menjalankan ini.

Unittests adalah tes spezialized di mana pengujian dalam isolasi (mis. Buisinesslogic tanpa database) adalah penting. Mock / fakes / stup digunakan untuk menegakkan isolasi ini.


2

Cukup: untuk menguji DAO aktual dan bukan konten basis data.

Misalkan kelas DAO Person Anda memiliki metode getByName (). Anda menulis tes dan memanggil Person.getByName ("John Smith"). Misalkan tes gagal, karena seseorang menghapus catatan John dari database. Sekarang, setiap perangkat lunak CI dan penyelia / pengulas Anda dapat mengklaim bahwa perangkat lunak Anda salah, padahal kenyataannya tidak. Jika Anda mengejek DB, Anda dapat membuktikan bahwa DAO Anda berfungsi jika diberikan baris yang benar dari tabel yang benar.

Jika Anda benar-benar ingin menguji database itu sendiri, yaitu: jika eksekusi metode DAO tertentu menempatkan data dalam keadaan tertentu, maka itu juga mungkin. Terlebih lagi itu sangat membantu dengan model data yang aneh (EAV, set pohon bersarang) di mana Anda tidak bisa mengharapkan database untuk memberikan integritas anti peluru. Lihatlah DBUnit untuk membuat hidup Anda lebih mudah.


1

Alasan lain adalah untuk menghindari waktu pelaksanaan sebenarnya menjalankan perintah database. Ini mungkin tidak terlihat seperti banyak tetapi overhead pengaturan dan penghancuran koneksi pada akhirnya akan bertambah dan kemungkinan besar secara signifikan meningkatkan waktu keseluruhan untuk menjalankan test suite dibandingkan dengan menggunakan benda tiruan.


0

Untuk mengisolasi kelas yang Anda uji. Atau jika tes gagal bagaimana Anda tahu masalahnya ada di kelas yang Anda uji atau salah satu dari dependensinya.


Apakah Anda langsung menelepon dan menguji metode dalam penerapan DAO?
Vinoth Kumar CM
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.