devstyle.pl - Blog dla każdego programisty
devstyle.pl - Blog dla każdego programisty
1 minut

PrincipalMock


30.10.2009

Podczas pisania testów jednostkowych możemy natknąć się na problem uprawnień – co jeśli testowana metoda wymaga, aby użytkownik był zalogowany, miał określoną nazwę bądź był przypisany do konkretnej roli? Nie chcemy przecież, aby testy jednostkowe w jakiś sposób logowały się do naszej aplikacji. Rozwiązaniem jest pomocnicza klasa, którą napisałem z wykorzystaniem frameworka Moq:

  1:  public static class PrincipalMock
  2:  {
  3:  	public static IPrincipal Create(string name, params string[] roles)
  4:  	{
  5:  		var identity = new Mock<IIdentity>();
  6:  		identity.Setup(x => x.Name).Returns(name);
  7:  		identity.Setup(x => x.IsAuthenticated).Returns(!string.IsNullOrEmpty(name));
  8:  
  9:  		var principal = new Mock<IPrincipal>();
 10:  		principal.Setup(x => x.Identity).Returns(identity.Object);
 11:  		roles.ToList().ForEach(role => principal.Setup(x => x.IsInRole(role)).Returns(true));
 12:  
 13:  		return principal.Object;
 14:  	}
 15:  }

Jej wykorzystanie, na przykład w metodzie z atrybutem SetUp (w przypadku nUnit) wykonywanej przed każdym testem:

  1:  Thread.CurrentPrincipal = PrincipalMock.Create("username", "role1", "role2");

Nie przegap kolejnych postów!

Dołącz do ponad 9000 programistów w devstyle newsletter!

Tym samym wyrażasz zgodę na otrzymanie informacji marketingowych z devstyle.pl (doh...). Powered by ConvertKit

Comments are closed.

Moja książka

Facebook

Zobacz również