Scott Guthrie'nin ASP.NET MVC Beta 1 numaralı telefonunda mükemmel bir şekilde çalışıyorum. İçinde UpdateModel yönteminde yapılan geliştirmeleri ve birim testini nasıl geliştirdiğini gösterir. Benzer bir projeyi yeniden oluşturdum ancak UpdateModel'e bir çağrı içeren bir UnitTest çalıştırdığımda controllerContext parametresini adlandıran bir ArgumentNullException alıyorum. UpdateModel'i kullanan alay edilmeden Birim Test İşlemlerini nasıl yapabilirim?
public class Country {
public Int32 ID { get; set; }
public String Name { get; set; }
public String Iso3166 { get; set; }
}
denetleyici eylem
: başarısız oluyor[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);
}
}
}
Ve nihayet birim testi:
[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
atılır
İşte benim modeli ile başlayan alakalı bit var "Değer, null. P" mesajıyla UpdateModel
numaralı çağrı ile arametrenin adı: controllerContext ". Ben UpdateModel
bir yerde testin yürütülmesi sırasında mevcut olmayan System.Web.Mvc.ControllerContext
gerektirir varsayalım.
Ayrıca bir yerde yanlış bir şey yaptığımı ve sadece doğru yönde işaret etmem gerektiğini varsayarım.
Yardım Lütfen!
Katılıyorum, bunu alay ederek çözebilirim, ancak Scott'ın PostModel örneklerine atıfta bulunarak Scott'ın söylediklerine açıkça karşı çıkıyor: "Yukarıdaki form teslim senaryolarının her ikisini de birim testine bir şeyle uğraşmak zorunda kalmadık. " –
TryUpdateModel (hangi UpdateModel'in kullandığı) kaynağına baktım ve kesinlikle ControllerContext kullanıyor. Yanıtımı, kaynak kodu biti ile güncelledim. – tvanfosson
@Hellfire, blog yayınında en az bir başka kişinin aynı hatayı aldığını belirten bir yorum gördüm. Beta 1'in kapıdan çıkmasından önce ModelBindingContext değişmiş olabilir. – tvanfosson