Salah satu tindakan pengontrol saya, yang dipanggil dalam permintaan Ajax, adalah mengembalikan URL ke sisi klien sehingga dapat melakukan pengalihan. Saya menggunakan Url.RouteUrl(..)
dan selama pengujian unit saya gagal karena Controller.Url
parameter tidak diisi sebelumnya.
Saya mencoba banyak hal, antara lain berusaha untuk rintisan UrlHelper
(yang gagal), secara manual membuat UrlHelper
dengan RequestContext
yang memiliki rintisan HttpContextBase
(yang gagal pada RouteCollection.GetUrlWithApplicationPath
panggilan).
Saya telah mencari Google tetapi hampir tidak menemukan apa-apa tentang masalah ini. Apakah saya melakukan sesuatu yang sangat bodoh menggunakan Url.RouteUrl
tindakan Controller saya? Apakah ada cara yang lebih mudah?
Untuk membuatnya lebih buruk, saya ingin dapat menguji URL yang dikembalikan dalam tes unit saya - sebenarnya saya hanya tertarik mengetahui bahwa itu mengarahkan ke rute yang benar, tetapi karena saya mengembalikan URL alih-alih rute, saya ingin mengontrol URL yang diselesaikan (mis. dengan menggunakan stubbed RouteCollection
) - tetapi saya akan senang mendapatkan lulus pengujian saya untuk memulai.
ApplyAppPathModifier
ini adalah bagian penting untuk UrlHelperImplementasi yang dimodifikasi dari eu-ge-ne. Yang ini mengembalikan tautan yang dibuat berdasarkan rute yang ditentukan dalam aplikasi. Contoh eu-ge-ne selalu mengembalikan respons tetap. Pendekatan di bawah ini akan memungkinkan Anda untuk menguji bahwa tindakan / pengontrol yang benar dan informasi rute dilewatkan ke dalam UrlHelper - yang merupakan apa yang Anda inginkan jika Anda menguji panggilan ke UrlHelper.
sumber
Posting ini mungkin berguna jika Anda ingin mengejek kelas HttpContextBase.
http://www.hanselman.com/blog/ASPNETMVCSessionAtMix08TDDAndMvcMockHelpers.aspx
sumber
Membangun jawaban oleh @ eu-ge-ne yang banyak membantu saya:
Saya memiliki ActionResult yang melakukan redirect dan juga panggilan UpdateModel dengan parameter FormCollection. Agar UpdateModel () berfungsi, saya harus menambahkan ini ke HttpRequestBase Mocked saya:
Untuk menguji apakah URL yang dialihkan benar, Anda dapat melakukan hal berikut:
sumber
http://kbochevski.blogspot.com/2010/06/unit-testing-mvcnet.html membahas cara menutup semua lapisan dengan unit test. Menggunakan Rhino dan MVC.Contrib untuk pengujian pengendali. Kode sumber di google mungkin sangat membantu.
sumber