asp.net-mvc – 如何使用UpdateModel进行单元测试操作而不进行模
发布时间:2020-12-16 04:23:28 所属栏目:asp.Net 来源:网络整理
导读:我一直在努力通过Scott Guthrie在 ASP.NET MVC Beta 1的优秀帖子.在其中他展示了对UpdateModel方法的改进以及它们如何改进单元测试.我已经重新创建了一个类似的项目,但是当我运行包含对UpdateModel的调用的UnitTest时,我会收到一个名为controllerContext参数
我一直在努力通过Scott Guthrie在
ASP.NET MVC Beta 1的优秀帖子.在其中他展示了对UpdateModel方法的改进以及它们如何改进单元测试.我已经重新创建了一个类似的项目,但是当我运行包含对UpdateModel的调用的UnitTest时,我会收到一个名为controllerContext参数的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."); } 调用UpdateModel时抛出ArgumentNullException,消息“Value not not null.参数名称:controllerContext”.我假设某个地方UpdateModel需要System.Web.Mvc.ControllerContext,它在执行测试期间不存在. 我也假设我在某处做错了,只需指向正确的方向. 请帮忙! 解决方法
我不认为可以这样做,因为UpdateModel使用的TryUpdateModel引用了ControllerContext,当从单元测试调用时它是null.我使用RhinoMocks来模拟或存根控制器所需的各种组件.
var routeData = new RouteData(); var httpContext = MockRepository.GenerateStub<HttpContextBase>(); FormCollection formParameters = new FormCollection(); EventController controller = new EventController(); ControllerContext controllerContext = MockRepository.GenerateStub<ControllerContext>( httpContext,routeData,controller ); controller.ControllerContext = controllerContext; ViewResult result = controller.Create( formParameters ) as ViewResult; Assert.AreEqual( "Event",result.Values["controller"] ); Assert.AreEqual( "Show",result.Values["action"] ); Assert.AreEqual( 0,result.Values["id"] ); 以下是www.codeplex.com/aspnet上Controller.cs源代码中的相关位: protected internal bool TryUpdateModel<TModel>( ... ) where TModel : class { .... ModelBindingContext bindingContext = new ModelBindingContext( ControllerContext,valueProvider,typeof(TModel),prefix,() => model,ModelState,propertyFilter ); ... } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-core – Microsoft.AspNet.Identity vnext中的User
- asp.net-mvc – T4MVC基本控制器没有默认构造函数
- asp.net – Orchard CMS 1.x [文档存储] – 混合记录支持和
- asp.net-mvc – asp.net mvc – 需要存储当前请求的一些数据
- asp.net – 城堡windsor控制器工厂和存储库无法解决
- asp.net-mvc-4 – 尝试从Visual Studio 2012项目目录运行站
- asp.net-mvc-3 – MVC3中的模型级错误?
- asp.net – 从Web API获取空的500 http状态代码
- 通过代码实现 OutOfMemory
- “自动完成关闭”无法在IE中运行 – ASP.Net
推荐文章
站长推荐
- asp.net – 在非开发环境中省略从Web API方法返回
- asp.net-mvc-4 – mvc4中的成功警报弹出窗口,不使
- asp.net-web-api – 自定义模型Binder不从Swagge
- asp.net – 如果缓存破坏程序与内容不匹配,防止捆
- asp.net-mvc – 不要在ASP .NET MVC 4 BundleCon
- asp.net-mvc – Chrome 27中SignalR和跨域请求的
- asp.net – Web部署项目AfterBuild路径问题
- 实体框架 – WebApi OData:$filter’any’或’a
- asp.net – OutOfMemoryException当发送大文件50
- asp.net – 是否可以使用OAuth2来保护“非休息”
热点阅读