2012-10-09 9 views
6

Ho un codice libreria che può essere chiamato da più tipi di client come WinForms, Console, ASP.NET ecc ... e che ha bisogno di determinare il principale corrente. In questo modo mi sto eseguendo un controllo in due fasi di Thread.CurrentPrincipal e poi Environment.UserName come segue:Come resettare Thread.CurrentPrincipal a non autenticato in un Test unitario

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

in una console app Thread.CurrentPrincipal.Identity.IsAuthenticated è sempre falso howerver in MSTest ha sempre un utente autenticato valido.

Esiste comunque la possibilità di reimpostare il valore di Thread.CurrentPrincipal nel test dell'unità su non autenticato per simulare l'app della console?

risposta

11

Tutto quello che dovete fare è:

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

avrei preferito creare una classe che implementa tutta la gestione CurrentPrincipal con la sua interfaccia corretta e ottenere che l'interfaccia iniettato dove serve.

Quindi è possibile prendere in giro il test dell'unità rendendoli più semplici.