मैं ASP.NET MVC Beta 1 पर स्कॉट गुथरी के उत्कृष्ट पद के माध्यम से अपना रास्ता काम कर रहा हूं। इसमें वह UpdateModel विधि में किए गए सुधारों को दिखाता है और वे यूनिट परीक्षण में सुधार कैसे करते हैं। मैंने एक समान प्रोजेक्ट को फिर से बनाया है, हालांकि जब भी मैं यूनिटटेस्ट चलाता हूं जिसमें अपडेटमोडेल को कॉल किया जाता है, तो मुझे नियंत्रक कॉन्टेक्स्ट पैरामीटर नामकरण एक ArgumentNullException प्राप्त होता है।मैं अद्यतन मॉडेल का उपयोग करने वाले मॉकिंग के बिना यूनिट टेस्ट एक्शन कैसे करूं?
यहाँ प्रासंगिक बिट है, अपने मॉडल के साथ शुरू:
public class Country {
public Int32 ID { get; set; }
public String Name { get; set; }
public String Iso3166 { get; set; }
}
नियंत्रक कार्रवाई:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(Int32 id, FormCollection form)
{
using (ModelBindingDataContext db = new ModelBindingDataContext()) {
Country country = db.Countries.Where(c => c.CountryID == id).SingleOrDefault();
try {
UpdateModel(country, form);
db.SubmitChanges();
return RedirectToAction("Index");
}
catch {
return View(country);
}
}
}
और अंत में मेरी इकाई परीक्षण है कि नाकाम रहने है:
[TestMethod]
public void Edit()
{
CountryController controller = new CountryController();
FormCollection form = new FormCollection();
form.Add("Name", "Canada");
form.Add("Iso3166", "CA");
var result = controller.Edit(2 /*Canada*/, form) as RedirectToRouteResult;
Assert.IsNotNull(result, "Expected to be redirected on successful POST.");
Assert.AreEqual("Show", result.RouteName, "Expected to redirect to the View action.");
}
ArgumentNullException
फेंक दिया जाता है संदेश के साथ UpdateModel
पर कॉल करके "मूल्य शून्य नहीं हो सकता है। पी arameter नाम: नियंत्रक कॉन्टेक्स्ट "। मुझे लगता है कि कहीं UpdateModel
को System.Web.Mvc.ControllerContext
की आवश्यकता है जो परीक्षण के निष्पादन के दौरान मौजूद नहीं है।
मैं भी यह सोचते हैं रहा है कि मैंने कुछ गलत कर रहा हूँ कहीं और सिर्फ सही दिशा में इशारा किया की जरूरत है।
कृपया मदद करें!
मैं मानता हूं, मैं इसे मजाक कर हल कर सकता हूं, लेकिन यह स्पष्ट रूप से अद्यतन करता है कि स्कॉट अपने अपडेट में अपडेटमोडेल उदाहरणों के संदर्भ में क्या कहता है: "हमें ऊपर दिए गए फॉर्म सबमिशन परिदृश्यों के यूनिट परीक्षण में कुछ भी नकल करने की आवश्यकता नहीं थी। " –
मैंने TryUpdateModel (जो UpdateModel उपयोग करता है) के स्रोत को देखा और यह निश्चित रूप से ControllerContext का उपयोग करता है। मैंने रिलावंट सोर्स कोड बिट के साथ अपनी प्रतिक्रिया अपडेट की है। – tvanfosson
@ हेल्फ़फायर, मैंने ब्लॉग पोस्ट पर एक टिप्पणी देखी जिसने संकेत दिया कि कम से कम एक अन्य व्यक्ति को एक ही त्रुटि हो रही है। यह हो सकता है कि बीटा 1 दरवाजा बाहर निकलने से पहले मॉडल बाइंडिंग कॉन्टेक्स्ट बदल गया। – tvanfosson