MVC视图单元测试基于认证的元素的可见性

时间:2011-10-10 03:54:16

标签: asp.net-mvc

我正在写一个MVC应用程序。

如果我有一段代码:

@if (User.IsInRole("Administrator")) {
        @Html.DropDownListFor(...)
    }

因此只有管理员才能看到dropdownlistfor。

你如何对这种情况进行单元测试?

2 个答案:

答案 0 :(得分:1)

这就是我要做的事情:

  • 为User对象(类型为IPrincipal)创建存根
  • 使用存根用户对象为Request对象(类型为HttpRequestBase)创建存根
  • 将存根请求对象注入您的请求上下文。

参见下面的示例(使用Rhino模拟)

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;

这将有助于您设置具有所有必需角色的控制器和当前用户。 我个人不会对视图进行单元测试,因为它应该很薄并且倾倒。你的大多数东西应该发生在控制器/业务层。

答案 1 :(得分:0)

如果您想对您的观看次数进行单元测试,我建议您查看the Razor Single File Generator。这将允许您预编译视图,并创建单元测试。