Как макет AuthorizeAttribute в asp.net MVC? - PullRequest
1 голос
/ 05 октября 2009

У меня есть собственный настраиваемый атрибут авторизации, и я пытаюсь проверить методы контроллера, чтобы определить, имеют ли они правильные роли. Теперь мой пользовательский тег авторизации содержит код базы данных.

Способы, которыми я занимаюсь, похоже, не работают, так как обнаруженные мной средства отражения просто не передают аргументов, поэтому мой конструктор по умолчанию в атрибуте Authorize получает удар, создавая новый объект уровня сервиса, который создает объект репозитория (убивает юнит-тест).

 var indexAction = typeof(Controller).GetMethod(method);
        var authorizeAttributes = indexAction.GetCustomAttributes(typeof(AuthorizeAttribute), true);

        //Assert
        Assert.That(authorizeAttributes.Length > 0, Is.True);

        foreach (AuthorizeAttribute att in authorizeAttributes)
        {
            Assert.That(att.Roles, Is.EqualTo(roles));
        }

Конструкторы моего AutorizeAttribute

  public MyAuthorize()
    {
        authorize = new ServiceLayer();
    }

    public MyAuthorize(IServicelayer layer)
    {
        authorize = layer;
    }

Отражение продолжает вызывать мой конструктор по умолчанию. Как я могу перейти в слой фальшивого сервиса или что-то в этом роде?

Спасибо

Ответы [ 2 ]

1 голос
/ 05 октября 2009

Вы смотрели на некоторые из насмешливых рамок? В прошлом я использовал их для фальсификации контекста http и т. Д.

Вот еще одно сообщение о переполнении стека, которое может вам помочь ...

https://stackoverflow.com/questions/37359/what-c-mocking-framework-to-use

0 голосов
/ 09 октября 2009

Не думаю, что проблема в вашем коде, а в том, что вы пытаетесь проверить. Что определяет роли, которые имеет атрибут?

Если вы извлекаете роли из уровня обслуживания на основе чего-то, переданного в атрибут, ваши тесты должны подтвердить, что атрибут существует в действии, которое он защищает (часть тестов контроллера), соответствующие вызовы будут сделаны для вашего действия. уровень обслуживания из атрибута (часть тестов атрибута), и что уровень обслуживания возвращает соответствующие значения для конкретного запроса (часть тестов контроллера).

Чтобы обеспечить совместную работу всех частей, вам нужно использовать интеграционные тесты, которые по существу имитируют весь конвейер запросов - что-то вроде MvcIntegrationTest Стива Сандерсона должно упростить это http://blog.codeville.net/2009/06/11/integration-testing-your-aspnet-mvc-application/

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