J'essaie de tester un bloc de code qui nécessite un utilisateur actuellement connecté au test. En utilisant le fournisseur d'appartenance .Net 2.0, comment puis-je me connecter par programme en tant qu'utilisateur pour ce test?connexion par programme avec le fournisseur d'appartenance .net
Répondre
Est-ce que votre code réellement besoin d'un utilisateur connecté via ASP.NET, ou il ne faut juste un CurrentPrincipal? Je ne pense pas que vous devez vous connecter par programme à votre site. Vous pouvez créer un GenericPrincipal, définir les propriétés dont vous avez besoin et l'attacher à, par exemple Thread.CurrentPrincipal ou un HttpContext mocké. Si votre code nécessite réellement RolePrincipal ou quelque chose, je changerais le code pour être moins couplé à l'adhésion à ASP.NET. À l'aide de votre fournisseur d'appartenance, vous pouvez valider un utilisateur à l'aide de Membership.ValidateUser.
Ensuite, vous pouvez définir le cookie d'authentification à l'aide de FormsAuthentication.SetAuthCookie. Tant que vous avez un conteneur de cookies, cela devrait vous permettre de vous connecter à un utilisateur.
Je l'ai trouvé plus pratique de créer une classe à usage unique qui gère le réglage et la réinitialisation 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;
}
}
Dans la méthode de test que vous venez envelopper votre appel avec une déclaration en utilisant comme ceci:
using (new TemporaryPrincipal(new AnonymousUserPrincipal())) {
ClassUnderTest.MethodUnderTest();
}
if(Membership.ValidateUser("user1",[email protected]))
{
FormsAuthentication.SetAuthCookie("user1",true);
}
- 1. Fournisseur d'installation Bouncycastle par programme
- 2. Ajout d'un fournisseur d'appartenance par programme
- 3. Configuration du fournisseur de rôles ASP.Net par programme
- 4. Connexion par programme au Sharepoint ULS
- 5. Modèle de fournisseur dans .net
- 6. Le service C# avec le fournisseur Oracle .NET devient de plus en plus lent
- 7. comment se déconnecter après s'être authentifié par le fournisseur de connexion unique?
- 8. Connexion de base de données par défaut du fournisseur SQL ADO.NET
- 9. Le fournisseur devait être spécifié sur une chaîne de connexion?
- 10. Comment concevoir un fournisseur indépendant DAL (.Net)
- 11. Comment gérer les retards sur la connexion Telnet par programme?
- 12. Connexion au serveur FTP avec .net 2.0
- 13. Comment réinitialiser le fournisseur de ressources de globalisation sur le fournisseur par défaut resx
- 14. Connexion et déconnexion de périphériques USB par programme
- 15. Problème de connexion VistaDB utilisant SQLConnection et ConnectionString par programme
- 16. Connexion de connexion dans le connecteur MySQL .NET
- 17. Comment communiquer avec le programme d'amorçage .NET 3.5 SP1
- 18. Gérer les appels Windows avec le programme .net?
- 19. Connexion par programme aux casques Bluetooth sur Windows Mobile
- 20. Télécharger le JRE par programme?
- 21. domaine web Cross connexion avec l'adhésion .net
- 22. Bibliothèque .NET OpenId - Fournisseur et consommateur
- 23. VS2005 C# Modifier par programme la chaîne de connexion contenue dans app.config
- 24. Comment ouvrir un fichier avec le programme associé par défaut
- 25. imprimer le document par programme avec VBA dans Outlook 2007
- 26. Comment concaténer deux chaînes avec le fournisseur Jet.OLEDB.4.0
- 27. Modifier la sélection par programme sur DatagridView (.NET)
- 28. Comment activer le programme Wake on LAN par programme
- 29. MVC - Obtenir le fournisseur d'adhésion au travail
J'ai besoin de l'appel à Membership.GetUser() pour renvoyer l'utilisateur actuellement connecté. – ddc0660
N'appelez pas Membership.GetUser() directement dans la classe testée. Fournissez à la classe un IGetUser en cours de création, utilisez-la à la place de Membership.GetUser(), puis faîtes une implémentation fictive de IGetUser pour le test. –