asp.net-mvc – 单元测试ViewEngines.Engines.FindView的正确方
发布时间:2020-12-16 09:58:30 所属栏目:asp.Net 来源:网络整理
导读:我最近对我的mvc应用程序进行了一些重构,并意识到返回了很多静态视图.而不是让多个控制器具有仅返回视图的操作结果,我决定创建一个控制器,如果它们存在则返回静态视图,如果视图不存在则抛出404错误. public ActionResult Index(string name){ ViewEngineResu
我最近对我的mvc应用程序进行了一些重构,并意识到返回了很多静态视图.而不是让多个控制器具有仅返回视图的操作结果,我决定创建一个控制器,如果它们存在则返回静态视图,如果视图不存在则抛出404错误.
public ActionResult Index(string name) { ViewEngineResult result = ViewEngines.Engines.FindView(ControllerContext,name,null); if (result.View == null) ThrowNotFound("Page does not exists."); return View(name); } 我的问题是单元测试的正确方法是什么?我尝试了下面的代码,但我得到的错误是“RouteData必须包含一个名为’controller’且具有非空字符串值的项”. [Theory] [InlineData("ContactUs")] public void Index_should_return_view_if_view_exists(string name) { controller = new ContentController(); httpContext = controller.MockHttpContext("/","~/Content/Index","GET"); ; var result = (ViewResult)controller.Index(name); Assert.NotNull(result.View); } 我的目的是让单元测试出去并获取真实的视图.然后我开始怀疑是否应该使用SetupGet为FindView模拟ViewEngines并创建两个测试,其中第二个测试如果视图为null则抛出未找到的异常. 测试此功能的正确方法是什么?任何指针,示例代码或博客文章都会有所帮助. 谢谢 解决方法
您应该创建一个模拟的视图引擎并将其放入集合中:
[Theory] [InlineData("ContactUs")] public void Index_should_return_view_if_view_exists(string name) { var mockViewEngine = MockRepository.GenerateStub<IViewEngine>(); // Depending on what result you expect you could set the searched locations // and the view if you want it to be found var result = new ViewEngineResult(new [] { "location1","location2" }); // Stub the FindView method mockViewEngine .Stub(x => x.FindView(null,null,false)) .IgnoreArguments() .Return(result); // Use the mocked view engine instead of WebForms ViewEngines.Engines.Clear(); ViewEngines.Engines.Add(mockViewEngine); controller = new ContentController(); var actual = (ViewResult)controller.Index(name); Assert.NotNull(actual.View); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – page load()或者page init()
- asp.net-mvc – Unity.MVC4懒惰在ASP.NET MVC应用程序中不起
- ASP.NET Core Web App应用第三方Bootstrap模板
- asp.net-mvc – 在asp.net MVC中排序表
- asp.net – 页面控制
- asp.net-mvc – 使用ASP.NET MVC测试驱动的开发 – 从哪里开
- asp.net – MVC 5 Web API与Facebook访问令牌到RegisterExt
- asp.net – Request.IsAuthenticated永远不会成立
- asp.net-mvc – 我们可以传递模型作为参数在RedirectToActi
- asp.net-mvc-2 – 使用ASP.NET MVC 2 C#4的最佳BDD框架是什
推荐文章
站长推荐
- asp.net – 输出缓存使用BOTH varybyparam和vary
- 通过Knockout使用MVVM的asp.net MVC,将模型传递给
- asp.net – Linq更新查询生成哪里0 = 1?
- ASP.NET bin目录中的Oracle oci.dll无法删除/不起
- asp.net-ajax – ASP.Net AJAX UpdatePanel无法触
- asp.net-mvc – 使用GUID作为ASP.NET MVC数据库中
- Asp.Net Core 空白模板搭建Mvc架构
- ASP.NET MVC默认项目结构和脚本文件夹
- asp.net – “填充无效,不能删除”异常WebResour
- asp.net-mvc-4 – Asp.Net Web Api – ModelBind
热点阅读