【发布时间】:2014-06-19 13:53:39
【问题描述】:
我们想对我们的 MVC5 web 应用程序的部分进行单元测试身份验证,但不清楚我们如何测试由[Authorize] 属性修饰的控制器/控制器方法。实例化控制器并调用该方法似乎忽略了 [Authorize] 属性。
类似地,一些控制器方法(例如:AccountController 的SignInAsync() 方法)最终会引用HttpContext 和它的对象层次结构中的Authentication 属性(下面的sn-p,标准MVC5 模板代码)。这使得很难正确进行单元测试。
那么对于如何有效地测试 MVC5 应用程序的身份验证方面,是否有人有一些想法或方法?似乎需要另一层来模拟 HTTP req/resp(即使那些 req/resp 不遍历网络堆栈)...
1: private IAuthenticationManager AuthenticationManager
2: {
3: get { HttpContext.GetOwinContext().Authentication; }
4: }
5:
6: private async Task SignInAsync(ApplicationUser user, bool isPersistent)
7: {
8: AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
9: var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
10: AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity);
11: }
【问题讨论】:
标签: asp.net asp.net-mvc unit-testing authentication