我正在嘗試單元測試需要當前登錄用戶的一段代碼。使用.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. .NET 4.5成員資格提供程序數據庫
- 4. 從AD成員資格提供程序切換到SQL成員資格提供程序
- 5. 問題:使用SQL成員資格提供程序進行身份驗證
- 6. 使用C#.net程序進行登錄
- 7. ASP.NET會話超時使用SQL成員資格提供程序
- 8. 使用ASP.NET成員資格提供程序模仿
- 9. 使用表存儲的Azure成員資格提供程序
- 10. 在EF CodeFirst中使用成員資格提供程序
- 11. 使用.NET成員資格提供程序來保護WCF SOAP API?
- 12. 以編程方式添加成員資格提供程序
- 13. 驗證我的應用程序與成員資格提供
- 14. 將ProviderBase用於成員資格提供程序
- 15. 使用ASP.NET成員資格提供者(沒有登錄邏輯?)
- 16. 在整個n-tier web應用程序中使用.NET成員資格提供程序
- 17. 使用.NET簡單成員資格提供程序 - 但對外部服務進行身份驗證
- 18. ASP.NET成員資格提供程序:動態設置應用程序名稱
- 19. 如何使用WCF執行成員資格提供程序認證?
- 20. 涉及的.Net成員資格提供
- 21. 無法使用由Asp.Net 4生成的密碼登錄成員資格提供程序重置密碼
- 22. SQL架構的ASP.NET成員資格提供程序
- 23. ASP.NET:完全控制ASP.NET成員資格提供程序
- 24. Silverlight 4中的ASP.NET SQL成員資格提供程序
- 25. 測試自定義ASP.NET成員資格提供程序
- 26. 擴展自定義成員資格提供程序
- 27. Active Directory成員資格提供程序 - 如何擴展?
- 28. 擴展ASP.NET成員資格提供程序,PK == FK ==好嗎?
- 29. 未創建ASP.Net成員資格提供程序數據庫
- 30. 自定義成員資格提供程序MVC 4
我需要調用Membership.GetUser()返回當前登錄的用戶。 – ddc0660 2008-10-30 16:10:30