В настоящее время я пытаюсь понять MSpec, в основном, чтобы узнать новые способы (T/B) DD, чтобы иметь возможность принять обоснованное решение о том, какую технологию использовать. Раньше я в основном (только читал) использовал встроенную структуру MSTest с Moq, поэтому BDD для меня совершенно новый.Тестирование ActionFilterAttributes с MSpec
Я пишу приложение ASP.NET MVC, и я хочу реализовать PRG. В прошлый раз, когда я это сделал, я использовал фильтры действий для экспорта и импорта ModelState
через TempData
, так что я мог бы вернуть RedirectResult
, и ошибки проверки все равно будут присутствовать, когда пользователь получит представление. Я проверил, что сценарий, проверив две вещи:
а) То, что ExportModelStateAttribute я написал был применен (среди тестов для моего контроллера)
б) атрибут работал (среди тестов для фильтра действия атрибутов)
Тем не менее, в BDD я понял, что меня еще больше беспокоит поведение, а тем более - реализация. Это означает, что я должен, вероятно, просто проверить, что состояние модели находится в tempdata, когда действие завершило выполнение - не обязательно, что это делается через атрибут.
Чтобы еще больше усложнить ситуацию, атрибуты не запускаются при вызове действия непосредственно в тесте, поэтому я не могу просто вызвать действие и посмотреть, выполнено ли задание.
Как я должен специфицировать/проверить это в MSpec?
OK. Итак, в основном, что вы рекомендуете, я определяю поведение, которое говорит «stores_model_state_in_temp_data», но на самом деле просто проверяет, применяется ли этот атрибут, а затем определяет тесты для атрибута в совершенно другом тестовом контексте? –
Да. Вы проверяете ожидаемое поведение (то, что) много раз и выполнение этого поведения (как) один раз. – Neal
ОК. Теперь проблема: в моем старом способе тестирования, если был применен атрибут, я использовал отражение и передал выражение и тип методу тестирования. При указании поведения я не могу найти способ передать эти аргументы. (Тип можно понять, просто создав класс поведения или что-то подобное, но мне все еще нужна лямбда ...) Как мне это сделать? –