एमवीसी व्यूज का परीक्षण क्यों किया गया है?


23

मैं वर्तमान में ASP.Net MVC एप्लिकेशन के लिए ग्राउंडवर्क सेट कर रहा हूं और मैं देख रहा हूं कि मुझे लिखने के लिए किस तरह के यूनिट-टेस्ट तैयार करने चाहिए। मैंने कई स्थानों पर लोगों को अनिवार्य रूप से यह कहते हुए देखा है कि 'अपने विचारों का परीक्षण करने से परेशान न हों, कोई तर्क नहीं है और यह तुच्छ है और एक एकीकरण परीक्षण द्वारा कवर किया जाएगा'।

मुझे समझ में नहीं आता है कि यह कैसे स्वीकृत ज्ञान बन गया है। एकीकरण परीक्षण इकाई परीक्षणों की तुलना में पूरी तरह से अलग उद्देश्य की सेवा करते हैं। अगर मैं कुछ तोड़ता हूं, तो मैं आधे घंटे बाद जानना नहीं चाहता जब मेरा एकीकरण परीक्षण टूट जाता है, मैं तुरंत जानना चाहता हूं।

नमूना परिदृश्य: कहते हैं कि हम एक ग्राहक इकाई के साथ एक मानक CRUD ऐप के साथ काम कर रहे हैं। ग्राहक का एक नाम और एक पता होता है। परीक्षण के प्रत्येक स्तर पर, मैं यह सत्यापित करना चाहता हूं कि ग्राहक पुनः प्राप्ति तर्क नाम और पते दोनों को ठीक से प्राप्त करता है।

रिपॉजिटरी को यूनिट-टेस्ट करने के लिए, मैं डेटाबेस को हिट करने के लिए एक एकीकरण परीक्षण लिखता हूं। व्यावसायिक नियमों को इकाई-परीक्षण करने के लिए, मैं रिपॉजिटरी का मजाक उड़ाता हूं, व्यापार के नियमों को उचित डेटा खिलाता हूं, और सत्यापित करता हूं कि मेरे अपेक्षित परिणाम वापस आ गए हैं।

मैं क्या करना चाहूंगा: UI को यूनिट-टेस्ट करने के लिए, मैं व्यावसायिक नियमों का मजाक उड़ाता हूं, अपनी अपेक्षित ग्राहक आवृत्ति सेट करता हूं, दृश्य प्रस्तुत करता हूं, और सत्यापित करता हूं कि दृश्य में मेरे द्वारा निर्दिष्ट उदाहरण के लिए उपयुक्त मान हैं।

मैं क्या कर रहा हूँ: रिपॉजिटरी को यूनिट-टेस्ट करने के लिए, मैं एक इंटीग्रेशन टेस्ट लिखता हूं, एक उपयुक्त लॉगिन सेटअप करता हूं, डेटाबेस में आवश्यक डेटा बनाता हूं, एक ब्राउज़र खोलता हूं, ग्राहक को नेविगेट करता हूं, और परिणामी पृष्ठ को सत्यापित करता हूं जिसमें उपयुक्त होता है मेरे द्वारा निर्दिष्ट उदाहरण के लिए मान।

मुझे लगता है कि ऊपर चर्चा किए गए दो परिदृश्यों के बीच ओवरलैप है, लेकिन महत्वपूर्ण अंतर यह समय और प्रयासों को सेट करने और परीक्षणों को निष्पादित करने के लिए आवश्यक है।

यदि मैं (या अन्य देव) दृश्य क्षेत्र को दृश्य से हटाता हूं, तो मैं इसे खोजने के लिए एकीकरण परीक्षण की प्रतीक्षा नहीं करना चाहता। मैं चाहता हूं कि एक यूनिट-टेस्ट में खोजा और चिह्नित किया जाए जो रोज़ाना कई बार मिलता है।

मुझे लग रहा है कि मैं कुछ प्रमुख अवधारणा को समझ नहीं रहा हूँ। क्या कोई समझा सकता है कि एमवीसी देखने की वैधता पर तत्काल परीक्षण प्रतिक्रिया क्यों एक बुरी बात है? (या यदि बुरा नहीं है, तो प्रतिक्रिया प्राप्त करने का अपेक्षित तरीका नहीं है)


1
"To unit-test the repository, I write an integration test"रुको क्या? यह भंडार का एक इकाई परीक्षण नहीं है। आप इसके लिए परीक्षण को स्वचालित कर रहे हैं, लेकिन परीक्षण के तहत कोड में अभी भी DAL और डेटाबेस शामिल हैं। आपके पास अपने व्यावसायिक नियमों के लिए आपके पास मौजूद रिपॉजिटरी का परीक्षण करने के लिए इसे अलग-अलग करना होगा।
स्टुपरयूसर

अपेक्षित रूप में प्रदान किए गए दृश्य का परीक्षण करने वाली इकाई सिर्फ इकाई परीक्षण है जो आपके अस्थायी इंजन काम करता है। यह आपके संकलित सी के परीक्षण की इकाई की तरह है जिसमें मशीन कोड के कुछ अंश होते हैं, आपकी इकाई आपके कोड का नहीं संकलक का परीक्षण करती है।
रेयानोस

2
@ रेयानोस सम्मानपूर्वक, मैं असहमत होने जा रहा हूं। अगर मैं (या किसी अन्य डेवलपर) गलती से यूआई क्षेत्र में एक डेटा विशेषता को दूसरे के लिए प्रस्तुत करने के लिए UI को तार करता हूं (उदाहरण के लिए, 'लास्ट नेम फील्ड' में 'फर्स्ट नेम', जिसका टेंपलेटिंग इंजन से कोई लेना-देना नहीं है, न ही यह एक दाल या बीआर मुद्दा है .. यह स्पष्ट रूप से एक समस्या यह है कि केवल देखने पर उजागर किया जाएगा।
पीटर बर्नियर

1
@PeterBernier आपके पास एक अच्छा बिंदु है, लेकिन मुझे "परीक्षण करना है कि क्या कंपाइलर काम करता है" और "मेरे कोड काम करता है या नहीं" परीक्षण के बीच की रेखा को परिभाषित करना मुश्किल है। यह उल्लेख नहीं करने के लिए कि UI के लिए परीक्षण कसकर UI पर युग्मित हैं। UI में कोई भी परिवर्तन परीक्षण विफल होने का कारण बनता है। आप वास्तव में परीक्षण को विफल किए बिना UI के किसी भी प्रकार के रिफैक्टरिंग नहीं कर सकते।
रेयानोस

जवाबों:


9

ASP.NET MVC में सरल UI परीक्षण पर्याप्त है। अनिवार्य रूप से आपको बस इतना करना है कि लौटे HTML में आपके ज़रूरी तत्व शामिल हों। हालांकि यह सुनिश्चित करता है कि HTML पृष्ठ आपके द्वारा अपेक्षित तरीके से संरचित है, यह UI का पूरी तरह से परीक्षण नहीं करता है।

उचित वेब UI परीक्षण के लिए सेलेनियम जैसे उपकरण की आवश्यकता होती है जो आपकी मशीन पर ब्राउज़रों का उपयोग करेगा और यह सुनिश्चित करेगा कि जावास्क्रिप्ट और HTML सभी ब्राउज़रों में ठीक से काम कर रहे हैं। सेलेनियम में एक क्लाइंट / सर्वर मॉडल होता है ताकि आपके पास यूनिक्स, मैक और विंडोज क्लाइंट के साथ आभासी मशीनों का एक सेट और उन एनवायरनमेंट के लिए ब्राउज़रों का सेट हो सके।

अब, एक अच्छी तरह से डिज़ाइन किया गया एमवीसी (पैटर्न, न कि फ्रेमवर्क) एप्लिकेशन मॉडल और नियंत्रक में महत्वपूर्ण तर्क देता है। संक्षेप में, जब आप उन दो पहलुओं का परीक्षण करते हैं तो एप्लिकेशन की कार्यक्षमता का परीक्षण किया जाता है। दृश्य करते हैं केवल प्रदर्शन तर्क है करने के लिए और आसानी से दृश्य निरीक्षण के साथ की जाँच कर रहे हैं। दृश्य में पतली प्रसंस्करण और आवेदन के थोक में अच्छी तरह से परीक्षण किए जाने के कारण, बहुत से लोग यह नहीं सोचते हैं कि दृश्य परत के परीक्षण का दर्द इसके द्वारा प्राप्त लाभ से आगे निकल जाता है।

उस ने कहा, एमवीसी के पास अनुरोध द्वारा लौटे डोम की जांच के लिए कुछ अच्छी सुविधाएं हैं। दृश्य परत के परीक्षण के लिए यह दर्द काफी कम कर देता है।


1
"अनिवार्य रूप से आपको बस इतना करना है कि लौटे HTML में आपके ज़रूरी तत्व शामिल हों।" यह वही है जो मैं करने की कोशिश कर रहा हूं और यह गैर-तुच्छ हो रहा है। क्या आप एक लिंक की ओर इशारा कर सकते हैं, जहां एक विशिष्ट नियंत्रक कार्रवाई के साथ काम करने के लिए केवल एक नियंत्रण प्रदान करने का विरोध किया जाएगा? (मैंने राइट-अप की एक जोड़ी के माध्यम से काम किया है, लेकिन RenderPartial वह पूरा नहीं कर रहा है जो मैं महत्वपूर्ण ओवरहेड के बिना करना चाहता हूं ..)
पीटर बर्नियर

आप mvccontrib.codeplex.com (MVC Contrib) की जांच करना चाहेंगे । यह सहायता प्रदान करता है जो मूल भाषा में नहीं बनाया गया था, और "टेस्ट-ड्राइव ASP.NET MVC" (व्यावहारिक प्रोग्रामर) पुस्तक में सिफारिश की गई थी। मुझे अब भी लगता है कि सेलेनियम व्यू टेस्टिंग के लिए एक बेहतर मैच है, हालाँकि।
बेरिन लोरिट्श

टेस्टहेल्पर (एमवीसी कंट्रीब
बेरिन लोरिट्श

सेलेनियम (मेरे मामले में सेलेनियम आरसी) वह है जो मैं अपने एकीकरण परीक्षणों के लिए उपयोग कर रहा हूं। मैं जो चाहता हूं वह उस बिंदु से पहले होने वाली विफलता के लिए है।
पीटर बर्नियर

2
@Peter: आपके प्रयासों के बारे में "गैर-तुच्छ" होने के बारे में आपकी टिप्पणी ठीक यही कारण है कि इकाई परीक्षण के विचारों पर ध्यान दिया जाता है। नतीजतन, एक विशिष्ट रणनीति यह है कि विचारों को जितना संभव हो उतना पतला बनाया जाए (अर्थात कोई व्यावसायिक तर्क न हो), ताकि अधिकांश इकाई परीक्षण कहीं और (आमतौर पर व्यूमॉडल में) हो सकें। दृश्य निरीक्षण द्वारा या सेलीनियम जैसे यूआई परीक्षण उपकरण के साथ विचारों को स्वयं सत्यापित किया जा सकता है।
रॉबर्ट हार्वे

7

मैं यह नहीं कहूंगा कि यह बहुत बुरी है। इसके बजाय, यह भावना इस तथ्य का परिणाम है कि यूनिट-परीक्षण एमवीसी विचार (कम से कम एस्पक्स किस्म) काफी कठिन है क्योंकि एस्पेक्स के विचारों का वेबफार्म पर बहुत अधिक निर्भरता है, जो स्वयं काफी अस्थिर हैं। तो तर्क यह जाता है कि यह प्रयास के लायक नहीं है क्योंकि विचार उस जटिल नहीं हैं।

बेशक विचार काफी जटिल हो सकते हैं इसलिए यह आपकी पसंद है।


3
ASP.NET MVC के विचार Webforms से बंधे नहीं हैं, जहाँ तक मुझे जानकारी है। ASP.NET MVC के लिए बड़े बिंदुओं में से एक नहीं है कि यह वेबफॉर्म नहीं है?
एडम लेअर

मेरा नज़रिया यह है कि यूआई को कवर करने के लिए एकीकरण परीक्षणों को लिखने में अधिक मानवीय प्रयास लगते हैं, क्योंकि यह विचारों को कवर करने के लिए वास्तविक 'यूनिट-टेस्ट' लिखना होगा। इसलिए मैं कुछ प्रतिरोधों को समझने की कोशिश कर रहा हूं, जो विचारों के लिए यूनिट-टेस्ट लिखने की दिशा में हो रहे हैं।
पीटर बर्नियर

@Anna Aspx के नज़ारे WebForms के ऊपर बने हैं। वे System.Web.UI.WebControls.Pageवर्ग से निकलते हैं , <asp:ContentPlaceholder>नियंत्रण का उपयोग करते हैं आदि जिस तरह से एमवीसी उन्हें निष्पादित करता है वह आमतौर पर WebForms के साथ जुड़े पृष्ठ निष्पादन पाइपलाइन से बचा जाता है, लेकिन यह अभी भी कवर के तहत बहुत सारे WebForms सामान का उपयोग करता है।
marcind

यदि आप एक अलग दृश्य इंजन (जैसे रेजर) का उपयोग करते हैं, तो आपको वेबफॉर्म इंजन से दूर जाने में सक्षम होना चाहिए।
मफिन मैन

6

मुझे यकीन नहीं है कि यह पर आधारित है। परीक्षण क्षमता ASP.NET MVC का उपयोग करने के प्रमुख लाभों में से एक है। की जाँच करें स्टीव सैंडरसन के ब्लॉग इस बारे में अधिक जानकारी के लिए।

उन्होंने हैंड्स-डाउन, बेस्ट ASP.MVC बुक (IMO) भी लिखी । न केवल वह एमवीसी को पढ़ाता है, बल्कि परीक्षण प्रथाओं सहित, इसके चारों ओर सर्वोत्तम प्रथाओं को पढ़ाने के लिए ऊपर और परे जाता है।

मुझे लगता है कि मुझे इकाई परीक्षण के विचारों पर थोड़ा स्पष्ट करने की आवश्यकता है - आप नियंत्रक (ActionResult, आदि) से लौटे परिणाम के आसपास इकाई परीक्षण बना सकते हैं। आपको वास्तविक UI और UI इंटरैक्शन के लिए अभी भी अन्य परीक्षण करने की आवश्यकता होगी।


"आपको वास्तविक UI और UI इंटरैक्शन के लिए अभी भी अन्य परीक्षण करने की आवश्यकता होगी।" यह वास्तव में मेरा सवाल है .. यूआई परीक्षण अचानक 'अन्य परीक्षण' (यानी, एकीकरण परीक्षण) का हिस्सा क्यों बन जाते हैं। मैं स्टीव सैंडरसन सामग्री का एक बहुत कुछ देखा था और इस तरह से मुझे इस रास्ते को शुरू कर दिया, मूल रूप से अपने 'MvcFakes' परियोजना के साथ क्या कर रहा है और पुराने MVC रिलीज के लिए लिखा जा रहा है अपने कोड के साथ मुद्दों में चल रहा है। ।
पीटर बर्नियर

1

आप नियंत्रक क्रिया द्वारा लौटाए गए दृश्य का परीक्षण करना सीख सकते हैं, नियंत्रक क्रिया द्वारा लौटाए गए दृश्य डेटा का परीक्षण कैसे कर सकते हैं, और परीक्षण कैसे करें कि क्या कोई नियंत्रक क्रिया आपको निम्न URL की जाँच करके किसी दूसरी नियंत्रक क्रिया में पुनर्निर्देशित करती है या नहीं, MVC में परीक्षण डेटा के बारे में इस संक्षिप्त लेख में वर्णन करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.