Saat ini saya sedang menyiapkan landasan untuk aplikasi ASP.Net MVC dan saya sedang mencari ke dalam unit-tes apa yang harus saya siapkan untuk menulis. Saya telah melihat di beberapa tempat orang-orang pada dasarnya mengatakan 'jangan repot-repot menguji pandangan Anda, tidak ada logika dan itu sepele dan akan dibahas oleh tes integrasi'.
Saya tidak mengerti bagaimana ini telah menjadi kebijaksanaan yang diterima. Tes integrasi melayani tujuan yang sama sekali berbeda dari tes unit. Jika saya memecahkan sesuatu, saya tidak ingin tahu setengah jam kemudian ketika tes integrasi saya pecah, saya ingin segera tahu.
Skenario Contoh: Katakanlah kita sedang berurusan dengan aplikasi CRUD standar dengan entitas Pelanggan. Pelanggan memiliki nama dan alamat. Pada setiap tingkat pengujian, saya ingin memverifikasi bahwa logika pengambilan Pelanggan mendapatkan nama dan alamat dengan benar.
Untuk menguji unit repositori, saya menulis tes integrasi untuk mencapai database. Untuk menguji aturan bisnis, saya membuat tiruan repositori, memberi makan data yang sesuai aturan bisnis, dan memverifikasi hasil yang saya harapkan dikembalikan.
Apa yang ingin saya lakukan: Untuk menguji UI, saya mengejek aturan bisnis, mengatur instance pelanggan yang diharapkan, membuat tampilan, dan memverifikasi bahwa view berisi nilai yang sesuai untuk instance yang saya tentukan.
Apa yang saya lakukan: Untuk menguji unit repositori, saya menulis tes integrasi, mengatur login yang sesuai, membuat data yang diperlukan dalam database, membuka browser, menavigasi ke pelanggan, dan memverifikasi halaman yang dihasilkan berisi yang sesuai nilai untuk contoh yang saya tentukan.
Saya menyadari bahwa ada tumpang tindih antara dua skenario yang dibahas di atas, tetapi perbedaan utama waktu dan upaya yang diperlukan untuk mengatur dan menjalankan tes.
Jika saya (atau pengembang lain) menghapus bidang alamat dari tampilan, saya tidak ingin menunggu tes integrasi untuk menemukan ini. Saya ingin ditemukan dan ditandai dalam unit-test yang mendapat beberapa kali setiap hari.
Saya merasa bahwa saya tidak memahami beberapa konsep kunci. Adakah yang bisa menjelaskan mengapa menginginkan umpan balik pengujian segera atas validitas tampilan MVC adalah hal yang buruk? (atau jika tidak buruk, maka bukan cara yang diharapkan untuk mendapatkan umpan balik tersebut)
sumber
"To unit-test the repository, I write an integration test"
Tunggu apa? Itu bukan tes unit repositori. Anda mengotomatiskan tes untuk itu, tetapi kode yang diuji masih menyertakan DAL dan database. Untuk menguji unit repositori, Anda mengisolasinya seperti aturan bisnis Anda.Jawaban:
Pengujian UI sederhana cukup mudah di ASP.NET MVC. Pada dasarnya yang harus Anda lakukan adalah menegaskan bahwa HTML yang dikembalikan berisi elemen yang Anda butuhkan. Meskipun ini memastikan bahwa halaman HTML terstruktur seperti yang Anda harapkan, itu tidak sepenuhnya menguji UI.
Pengujian UI web yang tepat memerlukan alat seperti Selenium yang akan menggunakan browser di mesin Anda dan memastikan bahwa JavaScript dan HTML berfungsi dengan baik di semua browser. Selenium memang memiliki model klien / server sehingga Anda dapat memiliki satu set mesin virtual dengan klien Unix, Mac, dan Windows dan serangkaian peramban yang umum di lingkungan tersebut.
Sekarang, aplikasi MVC (pola, bukan kerangka) yang dirancang dengan baik menempatkan logika penting dalam model dan pengontrol. Singkatnya, fungsionalitas aplikasi diuji ketika Anda menguji kedua aspek tersebut. Tampilan cenderung hanya memiliki logika tampilan dan mudah diperiksa dengan inspeksi visual. Karena pemrosesan yang tipis dalam tampilan dan sebagian besar aplikasi sedang diuji dengan baik, banyak orang tidak berpikir bahwa rasa sakit menguji lapisan tampilan lebih besar daripada manfaat yang diperolehnya.
Yang mengatakan, MVC memang memiliki beberapa fasilitas bagus untuk memeriksa DOM yang dikembalikan oleh permintaan. Itu mengurangi sedikit rasa sakit untuk menguji lapisan tampilan.
sumber
Saya tidak akan mengatakan itu disukai. Sebaliknya, sentimen itu adalah hasil dari fakta bahwa pengujian MVC pandangan unit (setidaknya dari berbagai aspx) cukup sulit karena pandangan aspx memiliki terlalu banyak ketergantungan pada WebForms, yang dengan sendirinya sangat tidak dapat diuji. Jadi argumennya adalah bahwa itu tidak sepadan dengan usaha karena pandangannya cenderung tidak rumit.
Tentu saja tampilan bisa sangat rumit sehingga itu pilihan Anda.
sumber
System.Web.UI.WebControls.Page
kelas, menggunakan<asp:ContentPlaceholder>
kontrol dll. Cara MVC mengeksekusi mereka menghindari banyak pipa eksekusi Page yang biasanya terkait dengan WebForms tetapi masih menggunakan banyak hal WebForms di bawah selimut.Saya tidak yakin itu disukai. Testabilitas adalah salah satu manfaat utama menggunakan ASP.NET MVC. Lihatlah blog Steve Sanderson untuk informasi lebih lanjut tentang ini.
Dia juga menulis buku ASP.MVC (IMO) tangan-ke-bawah terbaik di luar sana. Dia tidak hanya mengajar MVC, tapi dia juga mengajarkan praktik terbaik di sekitarnya, termasuk praktik pengujian.
Saya pikir saya perlu mengklarifikasi sedikit pada pandangan pengujian unit - Anda dapat membangun tes unit di sekitar hasil yang dikembalikan dari controller (ActionResult, dll.). Anda masih perlu melakukan pengujian lain untuk interaksi UI dan UI yang sebenarnya.
sumber
Anda dapat mempelajari cara menguji Tampilan yang dikembalikan oleh tindakan pengontrol, cara menguji Data Tampilan yang dikembalikan oleh tindakan pengontrol, dan cara menguji apakah satu tindakan pengontrol mengarahkan Anda ke tindakan pengontrol kedua dengan memeriksa URL berikut, jelaskan dalam artikel singkat ini tentang Menguji Tampilan Data dalam MVC .
sumber