Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 基于身份验证的MVC视图元素的单元测试可见性_Asp.net Mvc - Fatal编程技术网

Asp.net mvc 基于身份验证的MVC视图元素的单元测试可见性

Asp.net mvc 基于身份验证的MVC视图元素的单元测试可见性,asp.net-mvc,Asp.net Mvc,我正在写一个MVC应用程序 如果我有一段代码: @if (User.IsInRole("Administrator")) { @Html.DropDownListFor(...) } 因此,dropdownlistfor仅对管理员可见,甚至对管理员可见 如何进行单元测试以确定是否发生了这种情况?如果您想对视图进行单元测试,我建议您签出。这将允许您预编译视图,并创建单元测试。这就是我要做的: 为用户对象创建存根(类型为IPrincipal) 使用存根用户对象为请求对象(

我正在写一个MVC应用程序

如果我有一段代码:

@if (User.IsInRole("Administrator")) {
        @Html.DropDownListFor(...)
    }
因此,dropdownlistfor仅对管理员可见,甚至对管理员可见


如何进行单元测试以确定是否发生了这种情况?

如果您想对视图进行单元测试,我建议您签出。这将允许您预编译视图,并创建单元测试。

这就是我要做的:

  • 为用户对象创建存根(类型为IPrincipal)
  • 使用存根用户对象为请求对象(HttpRequestBase类型)创建存根
  • 将存根请求对象注入到请求上下文中
请参见下面的示例(使用Rhino模拟)

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;