我正在尝试单元测试需要当前登录用户的一段代码。使用.Net 2.0成员资格提供程序,如何以编程方式登录为用户进行此测试?使用.net成员资格提供程序进行程序化登录
7
A
回答
1
您的代码实际上是否需要通过ASP.NET登录的用户,还是只需要一个CurrentPrincipal?我不认为你需要以编程方式登录到您的网站。您可以创建一个GenericPrincipal,设置您需要的属性并将其附加到,例如Thread.CurrentPrincipal或模拟的HttpContext。如果您的代码实际上需要RolePrincipal或其他东西,那么我会更改代码以减少耦合到ASP.NET成员身份。
0
使用您的会员供应商,您可以使用Membership.ValidateUser验证用户。然后,您可以使用FormsAuthentication.SetAuthCookie来设置身份验证Cookie。只要你有一个cookie容器,这应该允许你登录一个用户。
2
我发现创建一个一次性类来处理设置和重置Thread.CurrentPrincipal是最方便的。
public class TemporaryPrincipal : IDisposable {
private readonly IPrincipal _cache;
public TemporaryPrincipal(IPrincipal tempPrincipal) {
_cache = Thread.CurrentPrincipal;
Thread.CurrentPrincipal = tempPrincipal;
}
public void Dispose() {
Thread.CurrentPrincipal = _cache;
}
}
在测试方法中,您只是一个using语句这样的包装您的来电:
using (new TemporaryPrincipal(new AnonymousUserPrincipal())) {
ClassUnderTest.MethodUnderTest();
}
13
if(Membership.ValidateUser("user1",[email protected]))
{
FormsAuthentication.SetAuthCookie("user1",true);
}
相关问题
- 1. 使用Active Directory成员资格提供程序进行ASP.NET登录控制
- 2. .NET 4.5通用成员资格提供程序表名
- 3. 从AD成员资格提供程序切换到SQL成员资格提供程序
- 4. 问题:使用SQL成员资格提供程序进行身份验证
- 5. 使用ASP.NET成员资格提供程序模仿
- 6. ASP.NET会话超时使用SQL成员资格提供程序
- 7. 在EF CodeFirst中使用成员资格提供程序
- 8. 使用表存储的Azure成员资格提供程序
- 9. 使用.NET成员资格提供程序来保护WCF SOAP API?
- 10. 以编程方式添加成员资格提供程序
- 11. 将ProviderBase用于成员资格提供程序
- 12. 使用ASP.NET成员资格提供者(没有登录逻辑?)
- 13. 在整个n-tier web应用程序中使用.NET成员资格提供程序
- 14. 如何使用WCF执行成员资格提供程序认证?
- 15. 无法使用由Asp.Net 4生成的密码登录成员资格提供程序重置密码
- 16. SQL成员资格提供程序中的MembershipUser和aspnet_User
- 17. Active Directory成员资格提供程序 - 如何扩展?
- 18. ASP.Net的PCI兼容成员资格提供程序?
- 19. 自定义成员资格提供程序+自定义CodeAccessSecurityAttribute
- 20. 扩展ASP.NET成员资格提供程序,PK == FK ==好吗?
- 21. 扩展Active Directory成员资格提供程序
- 22. AppHarbor上的MongoDB成员资格提供程序
- 23. Active Directory成员资格提供程序与AD LDS
- 24. SqlRoleProvider +自定义成员资格提供程序
- 25. 扩展自定义成员资格提供程序
- 26. ASP.NET MVC自定义成员资格提供程序Web.config错误
- 27. 未从web.config读取成员资格提供程序属性
- 28. 单声道与SQL Server成员资格提供程序?
- 29. SQL架构的ASP.NET成员资格提供程序
- 30. ASP.NET:完全控制ASP.NET成员资格提供程序
我需要调用Membership.GetUser()返回当前登录的用户。 – ddc0660 2008-10-30 16:10:30