如何对使用 FederatedAuthentication.SessionAuthenticationModule 的代
本文关键字:FederatedAuthentication SessionAuthenticationModule 的代 | 更新日期: 2023-09-27 18:30:53
如何测试此代码(ASP.NET MVC 4,.NET 4.5 Web应用程序中的登录方法):
public ActionResult Login(LoginModel model, string returnUrl)
{
if (ModelState.IsValid && _userCredentialsService.ValidateUser(model.UserName, model.Password))
{
SessionAuthentication.SetAuthCookie(model.UserName, _userCredentialsService.GetUserGroups(model.UserName), model.RememberMe);
return RedirectToLocal(returnUrl);
}
}
使用这个 SetAuthCookie 方法:
public static void SetAuthCookie(IEnumerable<Claim> claims, bool isPersistent)
{
if (!HttpContext.Current.Request.IsSecureConnection && FormsAuthentication.RequireSSL)
{
throw new HttpException(500, "Connection is not secured with SSL");
}
var sessionToken = CreateSessionSecurityToken(CreatePrincipal(claims.ToList()), isPersistent);
FederatedAuthentication.SessionAuthenticationModule.WriteSessionTokenToCookie(sessionToken);
}
我在访问SessionAuthenticationModule
时收到一个空引用异常(该异常由尝试获取 HttpContext 时提到的属性在内部引发)。这是堆栈跟踪:
at System.IdentityModel.Services.FederatedAuthentication.GetHttpContextModule[T]()
at System.IdentityModel.Services.FederatedAuthentication.GetHttpModule[T]()
at System.IdentityModel.Services.FederatedAuthentication.get_SessionAuthenticationModule()
我已经在位于测试程序集中的 app.config 中制作了我的 web.config 的精确副本,并且代码在应用程序的正常运行时中工作。
我已经使用了HttpSimulator和MvcContrib测试助手,以便设置HttpContext,但仍然抛出异常。有没有人有关于如何测试它的解决方案或解决方法?
你总是可以使用Typemock Isolator/Telerik JustMock - 它们允许模拟静态方法和未来(在代码中创建的类)。在隔离器的情况下,一个简单的 Isolate.WhenCalled(() => FederatedAuthentication.SessionAuthenticationModule)
.WillReturn(<a fake value>);
应该做这个技巧