我一直在阅读Scott Guthrie的ASP.NET MVC Beta 1,其中展示了对UpdateModel方法的改进以及它们如何提高单元测试效率。我已经创建了一个类似的项目,但是每当运行包含对UpdateModel调用的UnitTest时,都会收到一个ArgumentNullException,指定了controllerContext参数。
下面是相关部分,从我的模型开始:
“ArgumentNullException”是由调用“UpdateModel”时抛出的,错误消息为“值不能为 null。参数名: controllerContext”。我认为,在执行测试期间缺少了需要的“System.Web.Mvc.ControllerContext”,因此在某处需要“UpdateModel”。
我还假设自己在某个地方做错了什么,只需要指出正确方向即可。
请帮忙!
下面是相关部分,从我的模型开始:
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”时抛出的,错误消息为“值不能为 null。参数名: controllerContext”。我认为,在执行测试期间缺少了需要的“System.Web.Mvc.ControllerContext”,因此在某处需要“UpdateModel”。
我还假设自己在某个地方做错了什么,只需要指出正确方向即可。
请帮忙!