2008-08-27 11 views
13

ठीक है।एएसपी.नेट - आप यूनिट टेस्ट वेबकंट्रोल कैसे करते हैं?

तो मुझे लगता है कि यह लगभग समय है जब मैं यूनिट परीक्षण में जाता हूं, क्योंकि हर कोई इसके बारे में लंबे समय तक बैंगिंग कर रहा है। मैंने NUnit इंस्टॉल किया है और कुछ "इंट्रो टू यूनिट टेस्टिंग" टाइप ट्यूटोरियल्स के माध्यम से चला गया है।

मैं वर्तमान में अपने वेब ऐप्स में से किसी एक के पुनर्निर्माण में सहायता के लिए एक छोटा ढांचा तैयार कर रहा हूं, इसलिए मैंने अपने ढांचे के लिए एक वीएस -2008 प्रोजेक्ट बनाया है और मैं इसे यूनिट परीक्षण करना चाहता हूं।

वेबकंट्रोल परीक्षण करने के लिए मैं पृथ्वी पर कैसे जा सकता हूं? विधियां सभी संरक्षित या निजी हैं, और चूंकि यह एक ढांचा है, लेकिन वेबकंट्रोल के अलावा और कुछ नहीं है।

कोई बात नहीं?

बर्न्स

उत्तर

8

आप पूर्ण उड़ा फ्रेमवर्क का उपयोग किए बिना मॉडल-व्यू-कंट्रोलर या मॉडल-व्यू-प्रस्तुतकर्ता प्रकार आर्किटेक्चर कर सकते हैं। आप पहले से ही पता चला है कि यूनिट-परीक्षण यूई-घटक मुश्किल है। इसके आस-पास के तरीके हैं लेकिन आप शायद उस मार्ग पर जाना नहीं चाहते हैं। आम तौर पर यह आपके परीक्षणों को बनाए रखने के लिए बहुत कठिन बना देगा, अधिक रखरखाव दुःस्वप्न कुछ प्रोग्रामर बिना कर सकते हैं :-)

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

मुझे पता है कि यह बहुत सारे काम की तरह लगता है और यह एक कामकाज की तरह लगता है लेकिन यदि आप इसका उपयोग करते हैं तो यह एक असली अच्छी वास्तुकला है जो यूई व्यवहार को बदलने में कहीं अधिक आसान बनाता है। जब आप वास्तव में इसकी आवश्यकता होती है तो आप हमेशा "असली" एमवीसी फ्रेमवर्क का उपयोग शुरू कर सकते हैं :-)

5

ues assembly:InternalsVisibleTo विशेषता और आप उन निजी सदस्यों उपयोग करने में सक्षम हो जाएगा।

[assembly:InternalsVisibleTo("YourTestProjectName")] 
3

आप ASP.NET का सबसे बड़ा दर्द बिंदु पाया है (गुण नोड के अंतर्गत) अपने Webcontrol परियोजना की AssemblyInfo.cs में यह रखो। जहां तक ​​मुहरबंद, निजी वर्ग जो इकाई परीक्षण में बाधा डालता है।

यह मुख्य कारण है कि टीडीडी लोग एमवीसी फ्रेमवर्क (एएसपी.नेट एमवीसी, कैसल मोनोरेल) का उपयोग करेंगे क्योंकि यह आपके दृश्य टेम्पलेट्स और आपके नियंत्रक तर्क से स्पष्ट पृथक्करण प्रदान करता है। नियंत्रक पूरी तरह से टेस्टेबल हैं।

0

ऊपर वर्णित एमवीसी ढांचा नियंत्रण का परीक्षण करने का सबसे अच्छा तरीका है। हालांकि यह परीक्षण करता है कि यह कैसे काम करता है थोड़ा अलग है।

यह पूरी तरह से कफ से बाहर है लेकिन आप उपयोगकर्ता नियंत्रण को सत्यापन जानकारी वापस करने के लिए कुछ संरक्षित विधियों और गुणों का पर्दाफाश कर सकते हैं और फिर परीक्षण उपयोगकर्ता नियंत्रण प्राप्त कर सकते हैं। वह नियंत्रण फ़ील्ड को पॉप्युलेट कर सकता है, बटन दबा सकता है और क्या नहीं। गन्दा की तरह लेकिन यह काम कर सकता है।

0

आप इस Rhino Igloo ढांचे पर भी एक नज़र डाल सकते हैं। यह वेबफॉर्म के लिए एक समझौता एमवीसी ढांचा है।

1

This अब तक एक पुराना लेख है, लेकिन मैं 2004 में एएसपीनेट वेबकंट्रोल के लिए नूनिट परीक्षण लिखने के लिए एनयूएनआईटीएएसपी का उपयोग कर रहा था।यह आलेख एक "नियंत्रण" वर्ग बनाने की उनकी अवधारणा का उपयोग करके एक सरल नियंत्रण का परीक्षण करने का विस्तृत उदाहरण देता है जो आपके परीक्षण से आपके नियंत्रण के विवरण को समाहित करता है। परीक्षक आपके नियंत्रण के समान असेंबली में भी होना चाहिए (इसलिए) उनके बीच कुछ चीजें साझा कर सकता है (उदा। उपयोगिता कार्य, स्थिरांक, आदि)।

मैंने तकनीक का उपयोग किया (और अन्य तकनीक के रूपों का उपयोग करते हैं) आज भी बहुत परिष्कृत नियंत्रणों का परीक्षण करने के लिए।

मुझे आशा है कि यह सहायक होगा।

+1

, इस लिंक अब टूट गया है :( – Jono

+2

@ JonoRR archive.org के लिए भगवान का शुक्र है: http://web.archive.org/web/20080705112750/http://blogs.pingpoet.com/overflow/archive/2004/03/18/474.aspx बीटीडब्लू: मेरे पास एक है उस साइट का बैकअप, और इसे वापस पाने के लिए मेरी टोडो सूची में एक कार्य जोड़ा है पी। मैं मृत यूआरएल का नेतृत्व करता हूं (हालांकि, स्पष्ट रूप से यह एक कम प्राथमिकता कार्य है)। –

0

Ivonna अलगाव में WebControls परीक्षण कर सकते हैं, Asp.Net संदर्भ भीतर बस session.GetControl ("Path.ascx") कॉल और सत्यापित करें कि यह सभी आवश्यक गुण है कि।

1

आप ब्राउज़र के माध्यम से परीक्षण घटकों को भी देख सकते हैं क्योंकि उपयोगकर्ता उन्हें WebAii जैसे परीक्षण फ्रेमवर्क का उपयोग करके देखेगा। मैंने इसे काम देखा है और यह बहुत अच्छा है। मुझे यह भी बताया गया है कि आप इसे स्वचालित बिल्ड में प्लग कर सकते हैं लेकिन मैंने अभी तक इसे नहीं देखा है।

आशा है कि यह मदद करता है ...

0

आप उन्हें इस तरह का परीक्षण:

[Test] 
public void ConditionQueryBuilderTest_RendersProperHtml() 
{ 
    var sw = new StringWriter(); 
    var queryBuilder = new ConditionQueryBuilderStub 
    { 
     ID = "UnitTestbuilder", 
     QueryBuilderURL = @"\SomeAspxPage\SomeWebMethod", 
     ResetQueryBuilderURL = @"\SomeAspxPage\OnQueryBuilderReset", 
     FilterValuesCollection = new Dictionary<int, string> { {15, "Some Condition"}} 
    }; 
    queryBuilder.RenderAllContents(new HtmlTextWriter(sw)); 

    AppendLog(sw.ToString()); 

    Assert.AreEqual(ExpectedHtml, sw.ToString()); // ExpectedHTML is the raw expected HTML 
} 

यहाँ मेरी ठूंठ है:

internal class ConditionQueryBuilderStub : ConditionQueryBuilder // ConditionQueryBuilder is a WebControl 
{ 
    internal void RenderAllContents(HtmlTextWriter writer) 
    { 
     RenderContents(writer); 
    } 
} 
स्कॉट के लिए
संबंधित मुद्दे