PrincipalMock

0

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

About Author

Programista, trener, prelegent, pasjonat, blogger. Autor podcasta programistycznego: DevTalk.pl. Jeden z liderów Białostockiej Grupy .NET i współorganizator konferencji Programistok. Od 2008 Microsoft MVP w kategorii .NET. Więcej informacji znajdziesz na stronie O autorze. Napisz do mnie ze strony Kontakt. Dodatkowo: Twitter, Facebook, YouTube.

Comments are closed.