Подумайте о действии, которое необходимо выполнить, чтобы проверить, показывает ли система предполагаемое поведение. Как вы попытаетесь обеспечить, чтобы «только отправка через POST» была возможна? Вы можете прийти к выводу, что вам действительно нужно выполнить интеграционный тест с использованием WatiN или Selenium и утверждать, что страница с ошибкой (405, метод не разрешена) отображается по методу запроса, отличному от POST.
Для быстрого пробного тестирования вы можете проверить атрибуты, прикрепленные к методу отправки AccountController. Ниже приводится реализация Notepad, как это хорошо за полночь, где я живу:
[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 или что-то подобное утверждению в режиме исполнения, а не только некоторый атрибут, наложенный на метод.
Я, конечно же, не буду тестировать каждое действие контроллера, связанное с POST, так как это слишком много повторяющаяся работа. Есть ли способ найти соглашение для методов, которые потребуют [HttpPost]
?
Я помню, как было реализовано соглашение для одного из моих старых проектов FubuMVC, где у нас было соглашение о том, что все действия контроллера, которые возвращают object
(подпись метода), будут автоматически ограничиваться POST. Код был довольно кратким, возможно, фильтр действий MVC может сделать то же самое для вас.
Если вас интересуют спецификации (тесты модулей) для поведения FubuMVC, я имел в виду: https://gist.github.com/1610214 –