asp.net-mvc – 如何使用UpdateModel进行单元测试操作而不进行模拟?
发布时间:2020-05-24 12:12:34 所属栏目: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-mvc – IIS7 ASP.NET MVC客户端缓存标头不起作用
- asp.net-mvc – 单元测试视图?
- asp.net – 在代码隐藏中更改文本框BackColor
- asp.net-mvc-4 – 如何在MVC 4中每3秒刷新一次局部视图?
- 如何返回404状态,无效参数传递给我的ASP.NET MVC控制器?
- 认证 – asp.net mvc 3:Page.User.IsInRole(“xy”)返回nu
- asp.net – 不明确的引用问题(Microsoft.AspNet.Identity和
- asp.net-mvc-3 – 子动作是否与其“父母”动作共享相同的Vi
- asp.net – 如何停止RadioButtonList标签文本从按钮下包装
- asp.net-mvc – 从Application_Start中获取网站的URL?
推荐文章
站长推荐
- Asp.Net MVC 3 JSON模型绑定无法正常工作
- asp.net-core – 当返回null而不是控制器中设置的
- asp.net – .net网络应用程序中的异常处理
- asp.net-mvc – 保护ASP.Net MVC站点
- asp.net-mvc – Visual Studio 2015 – ASP.Net应
- asp.net-mvc – Bug? ASP.NET MVC 2中的客户端验
- asp.net – 在HTTP POST IIS ASP .NET上出现HTTP
- asp.net – 验证失败后如何防止页面跳转到顶部位
- asp.net-core – Netcore 2.1.1版本导致应用程序
- global-variables – MVC 3 Razor _ViewStart中的
热点阅读
