如何单元测试我的asp.net-mvc控制器的OnActionExecuting方法?
发布时间:2020-12-27 15:24:15 所属栏目: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 – __doPostBack在DotNetNuke网站上未定义为IE 10
- 从app_data中删除文件夹时如何防止asp.net重新编译?
- asp.net-mvc – 具有ASP.NET MVC的多语言网站
- 实体框架 – WebApi OData:$filter’any’或’all’查询不
- asp.net-mvc-4 – 全局过滤器MVC 4的执行顺序是什么
- asp.net-mvc-3 – “区域”文件夹中的样式,脚本和图像
- asp.net-mvc-3 – RedirectResult Object作为URL中的参数
- ASP.NET成员资格 – 让用户使用以前的密码
- 在IIS / ASP.Net中的.NET 1.1应用程序中创建.NET 3.0子应用
- asp.net core标签助手的高级用法TagHelper+Form
推荐文章
站长推荐
- asp.net-mvc – 如何将XML作为POST传递给ASP MVC
- asp.net – MVC4 – ContextDependentView – 这
- asp.net core 实现一个简单的仓储的方法
- Asp.net Core 1.1 升级后操作mysql出错的解决办法
- asp.net – 在asp页面中显示来自其他站点的网页
- asp.net – 如何查看Chrome开发者工具中发布到表
- asp.net – 使用/ signalr / ping调用时使用长轮
- 受asp.net MVC启发的更好的WebForms
- asp.net – Tridion分析和个性化错误:用户不能为
- asp.net – 如何使用Inno Setup脚本创建IIS应用程
热点阅读
