如何单元测试我的asp.net-mvc控制器的OnActionExecuting方法?
发布时间:2020-12-15 12:42:53 所属栏目:asp.Net 来源:互联网
导读:我已经覆盖了我的控制器的OnActionExecuting方法来根据执行的filterContext设置一些内部状态.如何测试这个?该方法本身是受保护的,所以我认为我必须在调用堆栈中更高一些. 我需要测试什么代码? 我正在使用mvc RC 1. 编辑:我也使用nunit. 谢谢 您需要添加和
我已经覆盖了我的控制器的OnActionExecuting方法来根据执行的filterContext设置一些内部状态.如何测试这个?该方法本身是受保护的,所以我认为我必须在调用堆栈中更高一些. 我需要测试什么代码? 我正在使用mvc RC 1. 编辑:我也使用nunit. 谢谢 解决方法您需要添加和使用私有访问器.右键单击控制器类,然后从菜单中选择创建私有访问器,并将其添加到测试项目中.一旦进入测试项目,创建您的控制器,然后创建一个访问器.该方法应该在访问器上可用.这是我自己的代码的一个示例测试:/// <summary> ///A test for OnActionExecuting ///</summary> [TestMethod()] [ExpectedException( typeof( InvalidOperationException ) )] public void OnActionExecutingWindowsIdentityTest() { var identity = WindowsIdentity.GetCurrent(); WindowsPrincipal principal = new WindowsPrincipal( identity ); var httpContext = MockRepository.GenerateStub<HttpContextBase>(); httpContext.User = principal; var actionDescriptor = MockRepository.GenerateStub<ActionDescriptor>(); RouteData routeData = new RouteData(); BaseController controller = new BaseController(); BaseController_Accessor accessor = new BaseController_Accessor( new PrivateObject( controller ) ); ControllerContext controllerContext = MockRepository.GenerateStub<ControllerContext>( httpContext,routeData,controller ); ActionExecutingContext filterContext = new ActionExecutingContext( controllerContext,actionDescriptor,new Dictionary<string,object>() ); accessor.OnActionExecuting( filterContext ); } 编辑:如果您没有使用MSTest进行单元测试,则可能需要手动生成访问器.本质上来说,您创建一个包装类,通过等效的公共方法暴露被测试类的私有/受保护方法,将被测试类的实例传递给包装器,然后使用包装器类的反射来调用私有/受保护的方法在被测课上. public class MyClass { protected void DoSomething( int num ) { } } public class MyClass_accessor { private MyClass privateObj; public MyClass_accessor( MyClass obj ) { this.privateObj = obj; } public void DoSomething( int num ) { MethodInfo info = privateObj.GetType() .GetMethod("DoSomething",BindingFlags.NonPublic | BindingFlags.Instance ); info.Invoke(obj,new object[] { num }); } } (编辑:台州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – Orchard CMS和Sitefinity CMS
- asp.net-mvc – Visual Studio 2010 Full和ASP.NET MVC 2.0
- ASP.Net下载大文件的实现方法
- asp.net-mvc – MVC4部分视图没有将值加载到“容器”模型中
- asp.net – 如何从TableAdapter中检索存储过程返回值
- Asp.Net 5分钟实现网页实时监控
- 单元测试 – 单元测试项目不能参考MVC项目
- asp.net-core – .NET Core SDK安装程序无法在Windows 2012
- asp.net – IIS 404自定义错误不能按预期工作
- asp.net-mvc – IIS显示服务器错误而不是自定义错误
推荐文章
站长推荐
- asp.net-mvc – SSL安全SaaS应用程序的URL设计
- asp.net – 访问asp:从代码背后的内容
- 如何在ASP.NET页面上使用框架?
- asp.net-mvc-3 – ASP.net MVC – 模型绑定不包括
- asp.net – 如何使用resxresourcewriter写入所有
- asp.net – 如何使用javascript生成假回发?
- asp.net-core – 如何在ASP.NET 5中使用“旧”依
- asp.net-web-api – Web API / MVC 6中的安全JSO
- asp.net-mvc – 找到相同类型的两个实体之间的差
- asp.net-mvc – 模型单元测试能否真正独立,如何[
热点阅读