ASP.NET поблочного тестирования MVC Разрешает атрибут проверять перенаправление к странице входа в систему

У меня была эта проблема, и я исправил ее с предложением manuel-84. Использование изображения 400x400px отлично поработало, в то время как мое уменьшенное изображение никогда не появлялось в ролике.

Обратите внимание, что Facebook рекомендует минимальное изображение размером 200 пикселей в качестве тега og: image: https: // developers. facebook.com/docs/opengraph/howtos/maximizing-distribution-media-content/#tags

63
задан RobertTheGrey 21 March 2009 в 11:52
поделиться

2 ответа

Вы тестируете на неправильном уровне. [Авторизовать] атрибут гарантирует, что маршрутизация механизм никогда не будет вызывать тот метод для неавторизованного пользователя - RedirectResult будет на самом деле происходить из маршрута, не из Вашего метода контроллера.

Хорошие новости - уже существует тестовое покрытие для этого (как часть исходного кода платформы MVC), таким образом, я сказал бы, что Вы не должны волноваться об этом; просто удостоверьтесь, что Ваш метод контроллера делает правильную вещь , когда это называют, и доверяйте платформе для не вызова его при неправильных обстоятельствах.

РЕДАКТИРОВАНИЕ: Если Вы захотите проверить присутствие атрибута в Ваших модульных тестах, то необходимо будет использовать отражение для осмотра методов контроллера следующим образом. Этот пример проверит присутствие Авторизовать атрибута на методе ChangePassword POST в 'Новой демонстрации' Проекта ASP.NET MVC 2, это установлено с MVC2.

[TestFixture]
public class AccountControllerTests {

    [Test]
    public void Verify_ChangePassword_Method_Is_Decorated_With_Authorize_Attribute() {
        var controller = new AccountController();
        var type = controller.GetType();
        var methodInfo = type.GetMethod("ChangePassword", new Type[] { typeof(ChangePasswordModel) });
        var attributes = methodInfo.GetCustomAttributes(typeof(AuthorizeAttribute), true);
        Assert.IsTrue(attributes.Any(), "No AuthorizeAttribute found on ChangePassword(ChangePasswordModel model) method");
    }
}
98
ответ дан Dylan Beattie 7 November 2019 в 12:37
поделиться

Why not just use reflection to look for the [Authorize] attribute on the controller class and / or the action method you are testing? Assuming the framework does make sure the Attribute is honored, this would be the easiest thing to do.

4
ответ дан RredCat 24 November 2019 в 16:17
поделиться
Другие вопросы по тегам:

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