2008-10-28 6 views

Répondre

1

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.

+0

J'ai besoin de l'appel à Membership.GetUser() pour renvoyer l'utilisateur actuellement connecté. – ddc0660

+2

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. –

0

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.

2

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(); 
} 
13
if(Membership.ValidateUser("user1",[email protected])) 
     { 
      FormsAuthentication.SetAuthCookie("user1",true); 
} 
Questions connexes