在ASP.NET MVC中模拟User.Identity
我需要为一个ASP.NET MVC 2.0网站创建单元测试。该网站使用Windows身份验证。
我一直在阅读模拟处理HttpContext的代码的HTTP上下文的必要性。我觉得我也开始在DI模式上得到一个句柄。 (给类一个类型为IRepository的属性,然后在实例化控制器时传递Repository对象。) 然而,我不明白,是通过User.Identity Mock可用的Windows Principal对象的正确方法。这是HttpContext的这一部分吗? 任何机构都有一个链接到一个文章,演示这个(或一本书的建议)吗? 谢谢, Trey Carroll 解决方法
我已经使用IoC来抽象这一点与一些成功。我首先定义了一个类来表示当前登录的用户:
public class CurrentUser { public CurrentUser(IIdentity identity) { IsAuthenticated = identity.IsAuthenticated; DisplayName = identity.Name; var formsIdentity = identity as FormsIdentity; if (formsIdentity != null) { UserID = int.Parse(formsIdentity.Ticket.UserData); } } public string DisplayName { get; private set; } public bool IsAuthenticated { get; private set; } public int UserID { get; private set; } } 它需要一个IIdentity在构造函数中设置其值。对于单元测试,您可以添加另一个构造函数,以允许绕过IIdentity依赖关系。 然后我使用Ninject(选择你最喜欢的IoC容器,没关系),并创建了一个IIdentity的绑定: Bind<IIdentity>().ToMethod(c => HttpContext.Current.User.Identity); 然后,在我的控制器里面我声明在构造函数中的依赖: CurrentUser _currentUser; public HomeController(CurrentUser currentUser) { _currentUser = currentUser; } IoC容器看到HomeController接受一个CurrentUser对象,CurrentUser构造函数接受一个I??Identity。它将自动解决依赖关系,并中提琴!您的控制器可以知道当前登录的用户是谁。对于我来说,使用FormsAuthentication似乎工作得很好。您可能能够将此示例适用于Windows身份验证。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – .NET MVC3中多页面表单的最佳实践/设计
- asp.net-mvc-3 – Orchard CMS DataAnnotations – 客户端验
- ASP.NET:获取*真实*原始URL
- asp.net – MVC 3部署到IIS6
- ASP.NET与PHP相比如何?
- asp.net-mvc – 当它被称为DocumentationController时,MVC控
- asp.net-mvc – 将{sitename}参数传递给MVC控制器操作
- asp.net – 上传到Azure
- asp.net – 多语言网站随机改变语言
- asp.net-mvc – 在ASP.NET MVC中的NHibernate会话管理
- asp.net-mvc – 如何使用html帮助器在asp.net mv
- asp.net – 检查site.master页面中的条件
- asp.net-membership – 如何获得会员资格的用户I
- asp.net-mvc – 为什么Nant不与TeamCity合作?
- asp.net – C#如何在GridView上创建Hyperlink On
- asp.net-core-mvc – ASP.NET Core MVC控制器在单
- asp.net – 是否有复杂的aspnet UI验证的设计模式
- asp.net – 在.NET中使用TinyMCE有一种简单的Spe
- ASP.NET vs. Silverlight
- asp.net-mvc – ASP.net MVC返回文件和重定向