asp.net-mvc – 如何测试MVC控制器的事件
发布时间:2020-12-16 04:10:46 所属栏目:asp.Net 来源:网络整理
导读:我想测试MVC控制器的OnException,OnActionExecuted事件. 如果我像这样使用mock: var httpContext = MockRepository.GenerateMockHttpContextBase(); var request = MockRepository.GenerateMockHttpRequestBase(); httpContext.Expect(c = c.Request).Retur
我想测试MVC控制器的OnException,OnActionExecuted事件.
如果我像这样使用mock: var httpContext = MockRepository.GenerateMock<HttpContextBase>(); var request = MockRepository.GenerateMock<HttpRequestBase>(); httpContext.Expect(c => c.Request).Return(request).Repeat.AtLeastOnce(); request.Expect(r => r.IsAuthenticated ).Return(true).Repeat.AtLeastOnce(); var controller = new MyController() ; controller.ControllerContext = new ControllerContext(httpContext,new RouteData(),controller); var result = controller.Execute() as ViewResult; …动作方法正在执行,但不会调用事件. 解决方法
这是MVC关注原则的分离之一.当您对方法进行单元测试时,您将独立于应用于它的任何过滤器来测试方法本身. (而OnException()和OnActionExecuting()实际上只是美化过滤器.)
如果您想独立测试其他方法,您可以自由地进行测试.通常,您可以通过调用过滤器来实现此目的: ((IActionFilter)controller).OnActionExecuting(...) ((IExceptionFilter)controller).OnException(...) 您必须创建上下文对象以传递给这些方法.最后,您有三个单元测试:一个用于OnActionExecuting(),一个用于OnException(),另一个用于您正在测试的实际方法.这个设置的好处是,一旦您对过滤器进行了一次单元测试,您就不必再为其他任何单元测试而担心它们了. 例如,如果您有Method1(),Method2()和Method3(),则无需测试方法过滤器的每个组合.只需要五个单元测试:OnActionExecuting(),OnException(),Method1(),Method2()和Method3().这消除了冗余测试,并且可以更轻松地跟踪代码中的潜在错误. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.netcore di 实现批量接口注入
- asp.net-mvc – 如何从剃刀视图访问My.Resources
- asp.net-mvc – ASP.NET MVC是否容易受到oracle的填充攻击?
- asp.net-mvc – 启动了Just-In-Time调试器,没有必要的安全权
- asp.net – 获取Gridview中隐藏列的值
- asp.net – 当我在gridview中进行排序时触发了Gridview Row
- asp.net – 在oauth身份验证后获取Twitter用户名
- asp.net – 在编辑视图中持久保存实体密钥的更安全的方法?
- 带有allowCustomSqlDatabase =“true”的ASP.NET SessionSt
- asp.net-mvc – 在MVC Razor中保留数据,而不在请求之间使用
推荐文章
站长推荐
- asp.net – default.aspx中的“StartTag:invali
- 动手造轮子:实现一个简单的依赖注入(二) --- 服
- 如何在asp.net(C#)中创建动态页面?
- 有没有替代ASP.NET的C#web开发?
- asp.net – Microsoft MVC“echo / print / outp
- asp.net – 为什么在Visual Studio 2010中禁用“
- asp.net – Telerik RadGrid具有不同类型的编辑控
- ASP.NET MVC验证属性和Jquery
- asp.net-mvc – 将SignalR与现有授权集成
- asp.net – 将错误从HttpModule传递到MVC应用程序
热点阅读