Я понимаю, что это старый пост, но недавно я столкнулся с той же проблемой, что и оригинальный постер, и после прочтения ответа я подумал, что мне придется сделать то же самое.Я не хочу, чтобы кто-то еще читал этот пост и терял драгоценное время, как я, поэтому я решил по-настоящему ответить на этот пост.
Поняв, что не существует простого способа обернуть функциональность UserPrincipal и не полагаться на интеграционные или сквозные тесты, как это было предложено, я вспомнил, что есть способ имитировать статические классы.С учетом вышесказанного ниже точно, как это сделать, используя Telerik JustMock .
private void MockUserPrincipal()
{
//Mock principal context
var context = Mock.Create<PrincipalContext>((action) => action.MockConstructor());
//Mock user principal
var user = Mock.Create(() => new UserPrincipal(context));
//Mock the properties you need
Mock.Arrange(() => user.Enabled).Returns(true);
Mock.Arrange(() => user.UserPrincipalName).Returns("TestUser");
Mock.Arrange(() => user.LastPasswordSet).Returns(DateTime.Now);
//Mock any functions you need
Mock.Arrange(() => user.IsAccountLockedOut()).Returns(false);
//Setup static UserPrincipal class
Mock.SetupStatic<UserPrincipal>();
//Mock the static function you need
Mock.Arrange(() => UserPrincipal.FindByIdentity(Arg.IsAny<PrincipalContext>(), Arg.AnyString)).Returns(user);
//Now calling UserPrincipal.FindByIdentity with any context and identity will return the mocked UserPrincipal
}