5

पहले बाध्यकारी; मुझे पता है कि मुझे एमवीसी के आंतरिक परीक्षणों की जांच करने की आवश्यकता नहीं है, लेकिन मुझे वास्तव में एक सूट की आवश्यकता है जो हमारे सिस्टम में बहने वाले डेटा के आसपास एक परीक्षण है।परीक्षण मॉडल में ASP.NET MVC 2

मैं कैसे, मैं करता है या कि objectA (प्रपत्र संग्रह, dict, संग्रह, वस्तु, आदि) objectAModel के अनुरूप नहीं है HTTP संदर्भ के सभी, परीक्षण मजाक बिना आशा कर सकते हैं?

मैं अपने नियंत्रक का दृष्टांत या कॉल कार्रवाई करने की जरूरत नहीं करना चाहते हैं। मैं बस परीक्षण करना चाहता हूं कि मेरी नई वस्तु मॉडलस्टेट को अमान्य कर देती है या नहीं।

मैं मैं बस लिख सकता है

var modelState = new ModelBindingContext<objectAModel>().validate(objectA); 
+0

मैं फिर परीक्षण करने में सक्षम हूं: Assert.isTrue (नया मॉडल बाइंडिंग कॉन्टेक्स्ट () मान्य (ऑब्जेक्ट ए)); – detroitpro

उत्तर

2

ब्रैड विल्सन एक excellent post on DataAnnotations


मैं इसे कैसे परीक्षण करना है करना चाहते हैं?

DataAnnotations का उपयोग करते हुए जिम्मेदार बताते हैं अपने मॉडल के लिए सत्यापन ले जाता नियंत्रक कार्यों से बाहर है और में मॉडल बांधने की मशीन, अपने नियंत्रक कार्यों सरल बनाया जाएगा के लिए अपने इकाई परीक्षण जिसका मतलब है।

आप इस के लिए परीक्षण लेखन कर रहे हैं, आप तीन चीजें सत्यापित करना होगा:

  1. DataAnnotationsModelBinder पंजीकृत है डिफ़ॉल्ट बंधक के रूप में? आप पूरे एप्लिकेशन के लिए केवल एक बार ऐसा करेंगे, जिस तरह से आप परीक्षण लिखेंगे।
  2. अपने मॉडल ठीक से DataAnnotations विशेषताओं के साथ सजाया है? आप अपने सत्यापन में जोड़ते हुए प्रत्येक सत्यापन विशेषता के लिए लेखन परीक्षण समाप्त कर देंगे।
  3. मेरी कार्रवाई विधि ठीक से प्रतिक्रिया करता है जब मॉडल स्थिति अमान्य है? आपको प्रति क्रिया विधि में केवल एक बार लिखना होगा।
+0

यह केवल परीक्षण करेगा कि मॉडल सही विशेषताओं से सजाया गया है। – detroitpro

0

बहुत बस, आप एक विधि है कि, अपने मॉडल के प्रकार के लिए ModelMetadata खींचती ModelValidator हो जाता है, और मॉडल वस्तु सत्यापित करता लागू कर सकते हैं।

public bool IsModelValid<T>(T model) where T : class 
{ 
    var metaData = ModelMetadataProviders.Current.GetMetadataForType(() => model, typeof(T)); 
    var validator = ModelValidator.GetModelValidator(metaData, new ControllerContext()); 
    var validationResults = validator.Validate(model); 
    return 0 == validationResults.Count(); 
} 

तक "बस", मेरा मतलब नहीं यह अनिवार्य रूप से विचार करने के लिए सभी संभव विन्यास ले करता है, लेकिन आप अपने मॉडल की वैधता पर एक बुनियादी जांच प्राप्त कर सकते हैं।

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