Ответ 1
Также большинство методов являются виртуальными, поэтому они являются макетными.
У меня есть код контроллера ASP.NET MVC
, который проверяет подлинность пользователя и если да, он проверяет, имеет ли он конкретное требование. Прекрасно работает.
У меня есть несколько модульных тестов, и мне нужно издеваться над IPrincipal
(что легко сделать)... но я не уверен, как проверить претензии! Обычно я делаю что-то вроде
public static ClaimsPrincipal ClaimsPrincipal(this Controller controller)
{
return controller.User as ClaimsPrincipal;
}
и некоторый код контроллера...
this.ClaimsPrincipal().HasClaim(x => x.......);
но все это не удается, когда я тестирую это в своем Unit Test.., потому что я не уверен, как я могу mock
ClaimsPrincipal
Любые идеи?
Также большинство методов являются виртуальными, поэтому они являются макетными.
Отказывание ClaimsPrincipal не слишком сложно
var cp = new Mock<ClaimsPrincipal>();
cp.Setup(m => m.HasClaim(It.IsAny<string>(),It.IsAny<string>()))
.Returns(true);
Однако в зависимости от того, как ваш контроллер получит доступ к нему. Посмотрите на этот вопрос Как издеваться над контроллером .User с помощью moq
который даст вам что-то вроде этого:
var cp = new Mock<ClaimsPrincipal>();
cp.Setup(m => m.HasClaim(It.IsAny<string>(), It.IsAny<string>())).Returns(true);
var sut = new UtilityController();
var contextMock = new Mock<HttpContextBase>();
contextMock.Setup(ctx => ctx.User).Returns(cp.Object);
var controllerContextMock = new Mock<ControllerContext>();
controllerContextMock.Setup(con => con.HttpContext).Returns(contextMock.Object);
sut.ControllerContext = controllerContextMock.Object;
var viewresult = sut.Index();
Я не уверен, что вы подразумеваете под "макетом". Но вы можете просто создать ClaimsPrincipal с нуля. Сначала создайте свойство ClaimsIdentity - добавьте требуемые требования и метод аутентификации. Затем заверните его в ClaimsPrincipal.