Подумайте о действии, которое необходимо выполнить, чтобы проверить, показывает ли система предполагаемое поведение.Как бы вы попытались убедиться, что «только отправка через POST» возможна?Вы можете прийти к выводу, что вам действительно нужно реализовать интеграционный тест с использованием WatiN или Selenium, и утверждать, что страница ошибки (405, метод не разрешен) отображается в методе запроса, отличном от POST.
Для быстрогоВ грязном тесте вы можете проверить атрибуты, прикрепленные к методу отправки AccountController.Ниже приведена реализация Блокнота, поскольку я далеко за полночь, где я живу:
[Subject(typeof(AccountController))]
public class when_user_logs_in : account_controller_spec
{
static object Attribute;
Because of = () => {
Attribute = typeof(AccountController)
.GetMethod("Submit")
.GetCustomAttributes()
.FirstOrDefault(x => x.Name.Contains = "HttpPost");
};
It can_only_submit_form_via_post = () => {
Attribute.ShouldNotBeNull();
};
}
Как вы можете видеть, спецификация на самом деле не описывает поведение системы.Ни один из ваших рабочих кодов никогда не оценит оператор в делегате Because
.Это не дает никакой реальной ценности, ни для вас, ни для вашего клиента.Вот почему я предложил использовать WatiN или что-то похожее на assert в поведении во время выполнения, а не просто какой-то атрибут, добавленный к методу.
Я бы точно не проверял каждое действие контроллера, связанное с POST, так как это слишком многократно повторяетсяРабота.Есть ли способ найти соглашение для методов, которые требуют [HttpPost]
?
Я помню, как реализовывал соглашение для одного из моих старых проектов FubuMVC, где у нас было соглашение, что все действия контроллера, которые возвращают object
(подпись метода) будет автоматически ограничена POST.Код был довольно лаконичен, возможно, фильтр действий MVC может сделать то же самое для вас.