2012-10-09 15 views
6

Tengo un código de biblioteca que puede ser llamado desde múltiples tipos de clientes como WinForms, Console, ASP.NET, etc. y que necesita determinar el principal actual. Al hacerlo estoy realizando una verificación en dos pasos de Thread.CurrentPrincipal y luego Environment.UserName de la siguiente manera:Cómo reiniciar Thread.CurrentPrincipal a una prueba no autenticada en una Unidad de Prueba

var currentUser = !System.Threading.Thread.CurrentPrincipal.Identity.IsAuthenticated ? null : System.Threading.Thread.CurrentPrincipal.Identity.Name; 
if (string.IsNullOrWhiteSpace(currentUser)) 
{ 
    currentUser = Environment.UserName; 
} 

en una consola de aplicación Thread.CurrentPrincipal.Identity.IsAuthenticated siempre es falsa howerver en MSTest siempre tiene una usuario autenticado válido.

¿Hay alguna forma de restablecer el valor de Thread.CurrentPrincipal en la prueba unitaria para que no autenticado imite la aplicación de la consola?

Respuesta

11

Todo lo que necesita hacer es:

Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity(""), new string[0]); 
0

yo preferiría crear una clase que implementa toda la gestión CurrentPrincipal con su interfaz adecuada y conseguir que la interfaz inyecta donde lo necesite.

Luego puede simularlo en las pruebas unitarias haciéndolos más simples.