मैं एक नियंत्रक कि एक इकाई पर एक साधारण संचालन जोड़ें लागू करता है और विवरण पृष्ठ पर रीडायरेक्ट है: (से RedirectToAction का उपयोग करयूनिट ASP.NET में एक नियंत्रक परीक्षण MVC 2 RedirectToAction साथ
[HttpPost]
public ActionResult Add(Thing thing)
{
// ... do validation, db stuff ...
return this.RedirectToAction<c => c.Details(thing.Id));
}
यह अच्छा काम करता है एमवीसी कॉन्ट्रिब असेंबली)।
जब मैं इस विधि का परीक्षण कर रहा हूं, तो मैं विवरण कार्रवाई से वापस लौटाए गए व्यूडेटा तक पहुंचना चाहता हूं (इसलिए मैं नई डाली गई चीज़ की प्राथमिक कुंजी प्राप्त कर सकता हूं और साबित करता हूं कि यह अब डेटाबेस में है)।
परीक्षण है:
var result = controller.Add(thing);
लेकिन परिणाम यहाँ प्रकार का है: System.Web.Mvc.RedirectToRouteResult
(जो एक System.Web.Mvc.ActionResult
है)। यह अभी तक विवरण विधि निष्पादित नहीं किया है।
मैंने ExecuteResult
को मॉक किए गए ऑब्जेक्ट पर ControllerContext
में गुजरने वाली लौटाई गई वस्तु पर कॉल करने का प्रयास किया है लेकिन मॉक ऑब्जेक्ट में विस्तार की कमी से ढांचा खुश नहीं था।
मैं विवरण, आदि इत्यादि भरने का प्रयास कर सकता हूं लेकिन फिर मेरा टेस्ट कोड उस कोड से लंबा रास्ता है जिस पर मैं परीक्षण कर रहा हूं और मुझे लगता है कि मुझे यूनिट परीक्षणों के लिए यूनिट परीक्षण की आवश्यकता है!
क्या मुझे परीक्षण दर्शन में कुछ याद आ रही है? जब मैं अपने लौटे राज्य में नहीं मिल पाता हूं तो मैं इस कार्रवाई का परीक्षण कैसे करूं?
धन्यवाद - यह निश्चित रूप से परीक्षण के दौरान ढांचे के साथ कठिनाइयों से बचने में मदद करता है। इसलिए, इस मुहावरे के बाद मेरे पास डीबीएस सेवा के लिए यूनिट परीक्षण होंगे जो साबित करता है कि मैं चीजों को जोड़ सकता हूं, और नियंत्रक के लिए एक इकाई परीक्षण साबित कर रहा हूं कि इसकी कॉल सेवा पर सहेजें। लेकिन मैंने वास्तव में साबित नहीं किया है कि नियंत्रक में पास की गई चीज़ डेटाबेस में समाप्त होती है। हो सकता है कि मैं इसे पूरे समूह के साथ अधिक जटिल मॉकिंग नियमों के साथ कर सकता हूं ... लेकिन यह सही नहीं लगता है, यह एक सरल ऑपरेशन के लिए बहुत सारे टेस्ट बॉयलर प्लेट है। –
ठीक है, परीक्षणों और परीक्षणों के परीक्षण के लिए दायरे और प्रयास का निर्धारण करना, कुछ ऐसा है जो मैं भी संघर्ष करता हूं। मुझे लगता है कि आपको अपने परीक्षणों को दो श्रेणियों में अलग करने की कोशिश करनी चाहिए: यूनिट परीक्षण और एकीकरण परीक्षण। यूनिट परीक्षणों को कार्यक्षमता की केवल बहुत छोटी इकाइयों का परीक्षण करना चाहिए, जैसे उपर्युक्त परीक्षण। एकीकरण परीक्षणों को देखना चाहिए कि सबकुछ कैसे एकीकृत होता है, हो सकता है कि आपके पास एक छोटी उपयोगकर्ता कहानी हो। मैं एकीकरण परीक्षण को यथासंभव करीब "असली" उपयोग करना पसंद करूंगा, उदाहरण के लिए WatiN चला रहा हूं और वास्तव में कुछ लिंक पर क्लिक कर रहा हूं। वहां पर नकली करने की कोई ज़रूरत नहीं है। – rmac
यदि आप अपने डीबीएस सेवा का परीक्षण करते हैं, तो आप साबित करते हैं कि यह काम करता है। फिर, आपको यह मानना चाहिए कि यह डेटाबेस कॉल को सही तरीके से संभाल सकता है। तो यदि आपका नियंत्रक इस सेवा का उपयोग करता है, तो आप जानते हैं कि यह काम करेगा। नकली ढांचे के साथ, आप सेवा विधियों को पारित किए गए पैरामीटर को मान्य कर सकते हैं और यह पर्याप्त है। मुझे लगता है कि rmacfie सही है, आप शायद बहुत अधिक गहन परीक्षण करने की कोशिश कर रहे हैं। आपकी इकाई परीक्षण में केवल एक ही क्रिया शामिल होनी चाहिए, पूरी प्रक्रिया नहीं। –