Asp.net mvc 基于身份验证的MVC视图元素的单元测试可见性
我正在写一个MVC应用程序 如果我有一段代码:Asp.net mvc 基于身份验证的MVC视图元素的单元测试可见性,asp.net-mvc,Asp.net Mvc,我正在写一个MVC应用程序 如果我有一段代码: @if (User.IsInRole("Administrator")) { @Html.DropDownListFor(...) } 因此,dropdownlistfor仅对管理员可见,甚至对管理员可见 如何进行单元测试以确定是否发生了这种情况?如果您想对视图进行单元测试,我建议您签出。这将允许您预编译视图,并创建单元测试。这就是我要做的: 为用户对象创建存根(类型为IPrincipal) 使用存根用户对象为请求对象(
@if (User.IsInRole("Administrator")) {
@Html.DropDownListFor(...)
}
因此,dropdownlistfor仅对管理员可见,甚至对管理员可见
如何进行单元测试以确定是否发生了这种情况?如果您想对视图进行单元测试,我建议您签出。这将允许您预编译视图,并创建单元测试。这就是我要做的:
- 为用户对象创建存根(类型为IPrincipal)
- 使用存根用户对象为请求对象(HttpRequestBase类型)创建存根
- 将存根请求对象注入到请求上下文中
var CurrentUser=MockRepository.GenerateStub();
CurrentUser.Stub(u=>u.IsInRole(“管理员”)).Return(true);
var context=MockRepository.GenerateStub();
var requestContext=newrequestcontext(context,newroutedata());
var request=MockRepository.GenerateStub();
context.User=CurrentUser;
Stub(c=>c.Request).Return(Request);
控制器=新控制器();
controller.ControllerContext=新的ControllerContext(requestContext,controller);
var view=controller.DoAction()作为ViewResult;
这将帮助您为控制器和当前用户设置所有必需的角色。
我个人不会对视图进行单元测试,因为它应该是瘦的和转储的。您的大部分工作应该发生在控制器/业务层
var CurrentUser = MockRepository.GenerateStub<IPrincipal>();
CurrentUser.Stub(u => u.IsInRole("Administrator")).Return(true);
var context = MockRepository.GenerateStub<HttpContextBase>();
var requestContext = new RequestContext(context, new RouteData());
var request = MockRepository.GenerateStub<HttpRequestBase>();
context.User = CurrentUser;
context.Stub(c => c.Request).Return(request);
controller = new YourController();
controller.ControllerContext = new ControllerContext(requestContext, controller);
var view = controller.DoAction() as ViewResult;