我们的团队目前使用WIF进行身份验证。在我们的代码中,我们使用
SessionManager.GetClaim(CustomClaimTypes.Username)
和其他SessionManager函数,用于在操作数据时标识当前登录的用户。我最近开始为我们的一个项目编写单元测试,这显然因为SessionManager为null而失败。
当测试方法调用从Session中检索数据的函数时,我遇到了同样的问题。为了解决这个问题,我加入了Moq库,并按如下方式模拟了Session:
var mockHttpContext = new Mock<HttpContextBase>();
mockHttpContext.SetupGet(c => c.Session).Returns(mockSession.Object);
mockHttpContext.SetupSet(c => c.Session["test"] = "test");
这是按预期工作的,但我找不到模拟FederatedAuthentication的WSFederationauthenticationModule的方法。这里代码失败的地方:
SessionSecurityToken stoken = new SessionSecurityToken(prin);
FederatedAuthentication.WSFederationAuthenticationModule.SetPrincipalAndWriteSessionToken(stoken, true); // WSFederationAuthenticationModule throws a null reference
我尝试创建一个WSFederationauthenticationModule并启动它,但那不起作用:
WSFederationAuthenticationModule ws = new WSFederationAuthenticationModule();
ws.Init(mockHttpContext.ApplicationInstance);
我似乎无法找到任何有用的资源来帮助我解决这个问题。有任何帮助吗?