asp.net-mvc – 查找单元测试方向,显示部分视图的控制器扩展
发布时间:2020-05-24 05:58:27 所属栏目:asp.Net 来源:互联网
导读:正如标题所示,我正在寻找如何正确测试控制器扩展的方向.该扩展呈现一个部分视图,反过来我在 JSONResult中使用: public static string RenderPartialViewToString(this Controller controller, string viewName = null, object model = null) {
|
正如标题所示,我正在寻找如何正确测试控制器扩展的方向.该扩展呈现一个部分视图,反过来我在 JSONResult中使用: public static string RenderPartialViewToString(this Controller controller,string viewName = null,object model = null)
{
if (string.IsNullOrEmpty(viewName))
{
viewName = controller.ControllerContext.RouteData.GetRequiredString("action");
}
controller.ViewData.Model = model;
using (StringWriter sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext,viewName);
ViewContext viewContext = new ViewContext(controller.ControllerContext,viewResult.View,controller.ViewData,controller.TempData,sw);
viewResult.View.Render(viewContext,sw);
return sw.GetStringBuilder().ToString();
}
}
使用示例 public JsonResult Foo()
{
var model = _repository.getSomeData();
return Json(new { html = this.RenderPartialViewToString("Index",model) },JsonRequestBehavior.AllowGet);
}
我使用NUnit& MvcContrib test helper,但是当设置一个使用这个扩展的控制器时,我正在运行一个NRE.我假设控制器上下文设置不正确? 最终测试是在ViewEngines.Engines.FindPartialView上进行的.以下是失败测试的一部分: var routeData = new RouteData();
routeData.Values.Add("controller","someName");
routeData.Values.Add("action","someAction");
var builder = new TestControllerBuilder();
var controller = new ListingController(repository.Object);
builder.RouteData = routeData;
builder.InitializeController(controller);
var result = controller.Foo();
解决方法您将不得不向ViewEngines.Engines集合添加一个嘲笑视图引擎,以便您可以模拟FindPartialView调用.这是Rhino Mocks的一个例子:var view = MockRepository.GenerateStub<IView>();
var engine = MockRepository.GenerateStub<IViewEngine>();
var viewEngineResult = new ViewEngineResult(view,engine);
engine
.Stub(x => x.FindPartialView(null,null,false))
.IgnoreArguments()
.Return(viewEngineResult);
ViewEngines.Engines.Add(engine);
那么你可以声明view.Render方法被调用,拦截它的参数并写一些嘲笑的数据到这个写入器,最后断言你的控制器操作返回这个嘲笑的字符串. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – 混合spark和webform视图引擎
- asp.net – 是否可以解密和查看ViewState值?
- asp.net-mvc-2 – 如何使用Castle Windsor在MVC中注入UrlHe
- asp.net-mvc – 如何将模型中的占位符文本添加到MVC视图中?
- asp.net-mvc – 不应加载引用程序集以执行
- asp.net-mvc-5 – 使用属性路由的路由优先级
- asp.net – GridView在行选择后滚动回到顶部
- asp.net-mvc – MVC 3 Ajax.ActionLink不能正常工作
- asp.net-mvc – 在ASP.NET身份中角色与声明的最佳实践
- asp.net-mvc – 使用Asp.net MVC 4中的OutputCacheAttribut
