Я согласен с juharr - используйте фальсификацию / изоляцию. Я бы порекомендовал Moq .
«Роберт» напечатает следующее:
using System;
using System.Security.Principal;
using Moq;
namespace ConsoleApplication1
{
class Program
{
static void Main()
{
var mockIdentity = new Mock<IIdentity>();
var mockPrincipal = new Mock<IPrincipal>();
mockIdentity.SetupGet(x => x.Name).Returns("Robert");
mockPrincipal.SetupGet(x => x.Identity).Returns(mockIdentity.Object);
IPrincipal myStub = mockPrincipal.Object;
Console.WriteLine(myStub.Identity.Name);
}
}
}
РЕДАКТИРОВАТЬ: Но если вы хотите сделать это вручную ...
using System;
using System.Security.Principal;
namespace ConsoleApplication2
{
class Program
{
static void Main()
{
IIdentity identity =
new IdentityStub
{
Name = "Robert",
AuthenticationType = "Kerberos",
IsAuthenticated = true
};
IPrincipal principal = new PrincipalStub(identity);
Console.WriteLine(principal.Identity.Name); // Robert
Console.WriteLine(principal.IsInRole(PrincipalStub.ValidRole)); // True
Console.WriteLine(principal.IsInRole("OtherRole")); // False
}
}
public class PrincipalStub : IPrincipal
{
public const string ValidRole = "TestRole";
public PrincipalStub(IIdentity identity)
{
Identity = identity;
}
public IIdentity Identity { get; private set; }
public bool IsInRole(string role)
{
return role == ValidRole;
}
}
public class IdentityStub : IIdentity
{
public string Name { get; set; }
public string AuthenticationType { get; set; }
public bool IsAuthenticated { get; set; }
}
}
(Выше не модульный тест, просто пример свернутых вручную заглушек с использованием небольшого внедрения зависимости).