如何单元测试我的asp.net-mvc控制器的OnActionExecuting方法?
发布时间:2020-12-15 11:28:10  所属栏目: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-mvc – 使用IIS7.5将网站中的URL绑定到另一个网站控
 - asp.net-mvc – 隐藏日期时间的ASP.NET MVC格式
 - asp.net-mvc – ASP.Net MVC中的自我AJAX更新部分视图/控制
 - 在ASP.NET中实现多文件上传的方法
 - asp.net-mvc-3 – mvc3在另一个内部嵌入了局部视图
 - asp.net-mvc-3 – 使用自定义VirtualPathProvider加载嵌入式
 - asp.net – 配置IIS服务器使用Aurelia框架并推送状态
 - asp.net-mvc – 单元测试中的ViewResult.ViewName属性为空
 - AJAX分页的代码(后台asp.net)
 - ASP.Net 分页控件源码
 
推荐文章
            站长推荐
            - asp.net 读取并修改config文件实现代码
 - asp.net – 在我的网站中添加HttpModule时出现“
 - asp.net – 我可以重新发布或携带POST数据(如果是
 - asp.net – 适用于多个用户的EWS通知中心
 - asp.net-mvc – ASP.NET MVC如何实现返回上一页的
 - kendo-ui – 剑道网格刷新(数据绑定两次)
 - 有没有办法加快asp.net中的编辑 – 编译 – 调试
 - asp.net-core – 我为什么要选择带有.Net核心的A
 - asp.net-mvc – 如何在RegularExpression中忽略大
 - asp.net – 如何从TableAdapter中检索存储过程返
 
热点阅读
            