Как вы тестируете свои приложения ASP MVC на безопасность пользователей? - PullRequest
5 голосов
/ 30 января 2009

Я уже некоторое время пишу тесты для своих доменных объектов, но я все еще не совсем уверен, как проводить тестирование безопасности в моем веб-проекте. Определенные пользователи в определенных средах могут получить доступ к определенным свойствам моих моделей и т. Д., Но как вы будете тестировать это? Прямо сейчас, я основываюсь на текущем аутентифицированном пользователе, но как мне поступить, чтобы внедрить поддельного провайдера аутентификации?

Это, вероятно, глупый вопрос, но если кто-нибудь может помочь мне выбраться из испытательного темного века, это будет очень цениться.

Ответы [ 3 ]

8 голосов
/ 26 февраля 2009

Эта ссылка ОДНА, но лучше использовать макет:

    Mock<ControllerContext> MockContext(string userName)
    {
        var mockContext = new Mock<ControllerContext>();
        // mock an authenticated user
        mockContext.SetupGet(p => p.HttpContext.User.Identity.Name).Returns(userName);
        mockContext.SetupGet(p => p.HttpContext.User.Identity.IsAuthenticated).Returns(true);
        return mockContext;
    }

    [TestMethod]
    public void DinnersController_Delete_Should_Fail_With_InvalidOwner_Given_Wrong_User()
    {
        //set by default
        var mockContext = MockContext("scottha");

        // mock an authenticated user
        _dinnerController.ControllerContext = mockContext.Object;

        ViewResult result = _dinnerController.Delete(1, "") as ViewResult;
        Assert.AreEqual("InvalidOwner", result.ViewName);
    }
0 голосов
/ 26 апреля 2015

Существует третий вариант, который использует Xania.AspNet.Simulator

сначала подготовьте действие контроллера

// arrange
var controllerAction = new AccountController().Action(c => c.ChangePassword())
    .Authenticate(<username>, <roles>);

далее у вас есть два варианта в зависимости от вашей реализации,

В первом сценарии, если вы возвращаете HttpUnauthorizedResult, то есть при использовании атрибута Authorize или при переопределении AuthorizeCore вашего контроллера, вы можете проверить его следующим образом, в этом случае фактический метод действия не вызывается.

// act, assert
controllerAction.Authorize().Should().BeNull();

Второй сценарий - это когда вы фактически проверяете пользователя внутри метода действия:

// act
var result = controllerAction.Execute();
// assert
result.ActionResult.Should().NotBeOfType<HttpUnauthorizedResult>();
0 голосов
/ 25 февраля 2009

Если при использовании TDD ваши тесты должны проверять только соответствующий код, все остальные связанные объекты должны быть ложными / поддельными

среди прочего вам понадобится фиктивный провайдер безопасности, который может имитировать пользовательские случаи, которые вы хотите протестировать (guest, user1, user2, admin и т. Д.)

Когда вы создаете пустой MVC-проект с текущим MVC RC, вы получаете базовую тестовую среду с фиктивными провайдерами безопасности (членство / роли и т. Д.). Они нуждаются в некотором уточнении, но дают базовый дизайн

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...