2010-05-20 25 views
5

के साथ एक्शनफिल्टर एट्रिब्यूट्स का परीक्षण करना मैं वर्तमान में एमएसपीसी को समझने की कोशिश कर रहा हूं, मुख्य रूप से (टी/बी) डीडी के नए तरीकों को सीखने के लिए जो तकनीक का उपयोग करने के लिए एक शिक्षित निर्णय लेने में सक्षम हो। पहले, मैंने ज्यादातर (केवल पढ़ने के लिए) मक के साथ अंतर्निहित एमएसटीएस्ट फ्रेमवर्क का उपयोग किया है, इसलिए बीडीडी मेरे लिए काफी नया है।एमएसपीसी

मैं एक एएसपी.नेट एमवीसी ऐप लिख रहा हूं, और मैं PRG को कार्यान्वित करना चाहता हूं। पिछली बार मैंने ऐसा किया था, मैंने ModelState को TempData के माध्यम से निर्यात और आयात करने के लिए एक्शन फ़िल्टर का उपयोग किया था, ताकि मैं RedirectResult वापस कर सकूं और उपयोगकर्ता को दृश्य मिलने पर सत्यापन त्रुटियां तब भी होंगी।

क) ExportModelStateAttribute मैं अपने नियंत्रक के लिए परीक्षण)
ख) विशेषता (कार्रवाई फिल्टर के लिए परीक्षण के बीच में काम किया है कि बीच में लागू किया गया था (लिखा था जिम्मेदार बताते हैं कि)

: मैं दो बातों की पुष्टि करने से उस परिदृश्य का परीक्षण किया हालांकि, बीडीडी में मैंने समझा है कि मुझे व्यवहार से और भी अधिक चिंतित होना चाहिए, और कार्यान्वयन के साथ भी कम होना चाहिए। इसका मतलब है कि मुझे शायद यह सत्यापित करना चाहिए कि कार्रवाई स्थिति निष्पादित होने पर मॉडल स्थिति tempdata में है - यह आवश्यक नहीं है कि यह एक विशेषता के माध्यम से किया गया हो।

चीजों को और जटिल करने के लिए, सीधे परीक्षण में कार्रवाई को कॉल करते समय विशेषताओं को नहीं चलाया जाता है, इसलिए मैं केवल कार्रवाई को कॉल नहीं कर सकता और देख सकता हूं कि नौकरी पूरी की गई है या नहीं।

मुझे एमएसपीसी में इसे कैसे नमूना/परीक्षण करना चाहिए?

उत्तर

1

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

आप अभी भी अपने नियंत्रक परीक्षणों में वांछित व्यवहार व्यक्त कर सकते हैं (मॉडल स्थिति अस्थायी डेटा में संग्रहीत है), लेकिन परीक्षण विशेषता के अस्तित्व पर जोर दे सकता है (शायद एक व्यवहार में encapsulated किया जा सकता है?)।

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

+0

ठीक है। तो मूल रूप से आप जो अनुशंसा करते हैं वह यह है कि मैं एक व्यवहार को परिभाषित करता हूं जो "stores_model_state_in_temp_data" कहता है लेकिन असल में सिर्फ यह जांचता है कि विशेषता लागू होती है, और उसके बाद पूरी तरह से अलग परीक्षण संदर्भ में विशेषता के लिए परीक्षण परिभाषित किया जाता है? –

+0

हां। आप अपेक्षित व्यवहार (क्या) कई बार परीक्षण करते हैं और उस बीयर (कैसे) के कार्यान्वयन का परीक्षण करते हैं। – Neal

+0

ठीक है। अब, एक अनुवर्ती समस्या: परीक्षण के मेरे पुराने तरीके में यदि कोई विशेषता लागू की गई थी, तो मैंने प्रतिबिंब का उपयोग किया और एक अभिव्यक्ति और परीक्षण विधि में एक प्रकार पारित किया। एक व्यवहार निर्दिष्ट करते समय, मैं इन तर्कों को पारित करने का कोई तरीका नहीं समझ सकता। (टाइप क्लास क्लास जेनेरिक या कुछ बनाकर टाइप किया जा सकता है, लेकिन मुझे अभी भी लैम्ब्डा चाहिए ...) मैं यह कैसे कर सकता हूं? –