2009-07-06 22 views
10

अद्यतन:सर्वश्रेष्ठ अभ्यास और परीक्षण योग्य नियंत्रकों

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


मैं जब ASP.Net MVC में परीक्षण योग्य नियंत्रकों का निर्माण कैसे HttpContext से निपटने के लिए पर राय के लिए देख रहा हूँ। इस पर पढ़ने के बाद विचार के दो स्कूल होते हैं - या तो HttpContextBase का निर्माण करते हैं और अपने यूनिट परीक्षण के लिए आवश्यक स्टब्स/मैक्स उत्पन्न करने के लिए एक मॉकिंग फ्रेमवर्क का उपयोग करते हैं या HttpContext के उन क्षेत्रों के आसपास अज्ञेयवादी रैपर कक्षाएं बनाते हैं जिन्हें आप उपयोग करना चाहते हैं ।

अभी मैं HttpContextBase के निर्माण की दिशा में झुका रहा हूं। ऐसा लगता है कि यह तेजी से विकास प्रक्रिया और बनाए रखने में आसान है क्योंकि आपको अतिरिक्त रैपर वर्गों को विकसित करने और बनाए रखने में समय बिताना नहीं है। मैं देख सकता हूं कि रैपर वर्ग कैसे फायदेमंद हो सकते हैं क्योंकि वे अंतर्निहित कार्यान्वयन को दूर करते हैं और नियंत्रक के संदर्भ को अनुरोध से अलग रखते हैं - लेकिन मुझे यकीन नहीं है कि यह सेटअप और बनाए रखने के लिए अतिरिक्त ओवरहेड के लायक है या नहीं।

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

जैसा कि यह एक आम समस्या की तरह लगता है, ज्यादातर टीम जो यूनिट परीक्षण और एएसपी.NET एमवीसी का उपयोग कर रही हैं, से निपटने के लिए, आप इस मुद्दे को संभालने के बारे में कैसे या कैसे गए होंगे? यदि आपने इस मुद्दे को संबोधित किया है, तो आपका समाधान कैसे काम करता है और अब आप अलग-अलग क्या करेंगे?

उत्तर

6

मैं HttpContextBase की तरफ झुका रहा हूं। मुख्य रूप से क्योंकि मुझे लगता है कि इस कारण से इसका आविष्कार किया गया था: टेस्टेबिलिटी। और जब पहले से ही एक स्वीकार्य समाधान है तो पहिया को फिर से शुरू करें।

यदि आप HttpContext चारों ओर अपने आवरण वर्गों में प्रयास के एक बहुत डाल दिया है, तो आप बहुत आपका अनुभव कैसा रहा इस सेटअप के साथ किया गया है करने के लिए HttpContextBase ...

1

परीक्षण के लिए मैं Rhino.Mocks का उपयोग करता हूं। नियंत्रक में HttpContext सेट अप करने के लिए, मैंने बस इसे मजाक कर दिया। तो परीक्षण (या Sut) के तहत अपने सिस्टम की तरह कुछ है:

  Controller controllerBase = sut as Controller; 

मैं तो नियंत्रक संदर्भ बाहर नकली, और नियंत्रक संदर्भ पर संदर्भ की स्थापना HttpContextBase वर्ग की नकली वापस जाने के लिए (के रूप में मैं उपर्युक्त)।

controllerContext = AMockOf<ControllerContext>(); 

// Add the test HttpContextBase to the controller context 
HttpContextBase httpContextBase = SetUpTestHttpContext(); 
WhenThe(controllerContext).IsAskedForIts(x =>x.HttpContext).Return(httpContextBase).Repeat.Any(); 

अन्य वस्तुओं मैं कभी कभी नकली रूप में अच्छी तरह का उपयोग करें: मेरा कोड की तरह कुछ लग रहा है।

+0

कुछ इसी तरह पहुंचते हैं? क्या आपने इसे बनाए रखने योग्य, व्यावहारिक, आदि पाया है? –

+0

हाँ, यह मेरे लिए बहुत अच्छा काम करता है। चाल यह है कि इसे सभी कक्षा वर्गों में छुपाएं, जो आपके टेस्ट क्लास से प्राप्त होते हैं, इसलिए आप इसे एक बार करते हैं और इसके बारे में चिंता करने की ज़रूरत नहीं है। – Erik

संबंधित मुद्दे