Как дразнить Контроллер. Пользователь, использующий moq

Было решено. В электронной таблице поле Est Extended Cost должно быть «Пользовательским». В этом случае потребуется 2 обновления: одно до нуля, а другое - в соответствии со средней стоимостью. Спасибо всем.

42
задан abatishchev 19 August 2014 в 18:30
поделиться

1 ответ

Вам нужно смоделировать ControllerContext, HttpContextBase и, наконец, IPrincipal, чтобы смоделировать свойство пользователя на Controller. Используя Moq (v2), что-то вроде следующего должно работать:

    [TestMethod]
    public void HomeControllerReturnsIndexViewWhenUserIsAdmin() {
        var homeController = new HomeController();

        var userMock = new Mock<IPrincipal>();
        userMock.Expect(p => p.IsInRole("admin")).Returns(true);

        var contextMock = new Mock<HttpContextBase>();
        contextMock.ExpectGet(ctx => ctx.User)
                   .Returns(userMock.Object);

        var controllerContextMock = new Mock<ControllerContext>();
        controllerContextMock.ExpectGet(con => con.HttpContext)
                             .Returns(contextMock.Object);

        homeController.ControllerContext = controllerContextMock.Object;
        var result = homeController.Index();
        userMock.Verify(p => p.IsInRole("admin"));
        Assert.AreEqual(((ViewResult)result).ViewName, "Index");
    }

Тестирование поведения, когда пользователь не является администратором, так же просто, как изменение ожидания, установленного в объекте userMock, для возврата false.

69
ответ дан 26 November 2019 в 23:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: