Можно ли каким-либо образом издеваться над участником претензий в моем веб-приложении ASP.NET MVC?

У меня есть код контроллера ASP.NET MVC, который проверяет, аутентифицирован ли пользователь, и если да, то проверяет, есть ли у него конкретное требование. Работает отлично.

У меня есть несколько модульных тестов, и мне нужно смоделировать IPrincipal (что легко сделать) ... но я не уверен, как проверить претензии! Я обычно делаю что-то вроде

public static ClaimsPrincipal ClaimsPrincipal(this Controller controller)
{
    return controller.User as ClaimsPrincipal;
}

и код контроллера...

this.ClaimsPrincipal().HasClaim(x => x.......);

но все это терпит неудачу, когда я проверяю это в своем модульном тесте .. потому что я не уверен, как я могу mock ClaimsPrincipal

Любые идеи?


person Pure.Krome    schedule 07.01.2013    source источник


Ответы (3)


Кроме того, большинство методов являются виртуальными, поэтому их можно имитировать.

person Brock Allen    schedule 09.01.2013

Издеваться над ClaimsPrincipal не так уж сложно

var cp = new Mock<ClaimsPrincipal>();
cp.Setup(m => m.HasClaim(It.IsAny<string>(),It.IsAny<string>()))
  .Returns(true);

Однако в зависимости от того, как ваш контроллер получает к нему доступ. Взгляните на этот вопрос Как издеваться над Controller.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();
person BozoJoe    schedule 12.04.2014

Я не уверен, что вы имеете в виду под «издевательством». Но вы можете просто создать ClaimsPrincipal с нуля. Сначала создайте ClaimsIdentity — добавьте необходимые утверждения и метод аутентификации. Затем оберните его ClaimsPrincipal.

person leastprivilege    schedule 07.01.2013