visual unitarias unit test studio pruebas net mvc ejemplo asp c# .net unit-testing asp.net-membership membership

c# - unitarias - inicio de sesión programático con el proveedor de membresía.net



unit test c# visual studio 2015 (4)

Estoy tratando de probar un código de una pieza que necesita un usuario actualmente conectado en la prueba. Al usar el Proveedor de Membresía .Net 2.0, ¿cómo puedo iniciar sesión programáticamente como usuario para esta prueba?


¿Su código realmente necesita un usuario conectado a través de ASP.NET, o solo necesita un CurrentPrincipal? No creo que deba iniciar sesión programáticamente en su sitio. Puede crear un GenericPrincipal , establecer las propiedades que necesita y adjuntarlo, por ejemplo Thread.CurrentPrincipal o un HttpContext falso. Si su código realmente necesita RolePrincipal o algo así, cambiaría el código para que esté menos acoplado a la membresía de ASP.NET.


Usando su proveedor de membresía puede validar a un usuario que usa Membership.ValidateUser. Luego puede establecer la cookie de autenticación usando FormsAuthentication.SetAuthCookie. Siempre que tenga un contenedor de cookies, esto debería permitirle iniciar sesión en un usuario.


He encontrado que es más conveniente crear una clase desechable que maneje la configuración y restablecimiento de 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; } }

En el método de prueba solo envuelve su llamada con una declaración de uso como esta:

using (new TemporaryPrincipal(new AnonymousUserPrincipal())) { ClassUnderTest.MethodUnderTest(); }


if(Membership.ValidateUser("user1",P@ssw0rd)) { FormsAuthentication.SetAuthCookie("user1",true); }