ASP.NET MVC - тестирование страницы для привязки модели
У меня есть модульные тесты, охватывающие мои модели связующих Я создаю ModelBindingContext и заполняю ValueProviderDictionary своими тестовыми значениями. Я уверен, что, как только мой контроллер получит модель, все будет покрыто тестированием, и правильные вещи происходят. Я также уверен, что если BindingContext верен, моя модель будет привязана правильно. В чем я не уверен, так это в том, что мой View при публикации будет правильно заполнять BindingContext.
Я начал писать тесты WatiN, которые заполняют формы, отправляют их обратно и проверяют получившийся вид. Это нормально, но кажется очень... косвенным. Например, страница с надписью "Ваш заказ был сохранен" после нажатия кнопки "Отправить" - мне нужно будет зайти в базу данных, чтобы проверить, правильно ли он был сохранен. У меня уже есть тесты, охватывающие это, когда модель, передаваемая моему контроллеру, имеет вид x, y сохраняется в базе данных. Почему я повторяю этот код в тесте представления?
Что я действительно хочу, так это заполнить представление, нажать submit и проверить либо (a) BindingContext, либо (b) модель, возвращаемую из ModelBinder.
Есть какие-нибудь практики, как это делать?
Просто хотел добавить, что это будет в дополнение к тестам WatiN. У меня ~50 тестов WatiN прямо сейчас (с большим количеством еще, чтобы добавить), и если бы я мог сделать выше без WatiN, это удалило бы только несколько тестов. Я буду продолжать использовать WatiN для того, для чего он хорош, но я чувствую, что злоупотребляю им прямо сейчас для тех нескольких тестов.
2 ответа
Вы можете попробовать MvcIntegrationTest Стива Сандерсона по адресу http://blog.codeville.net/2009/06/11/integration-testing-your-aspnet-mvc-application/.
В вашем случае привязка модели не будет выполнена, только если ваши представления не будут соответствовать рамочным соглашениям. Первый признак того, что происходит, - это когда ваш вид не показывает ожидаемый результат. Следующий, вероятно, будет, когда ваши тесты WatiN не пройдут по сообщениям.
Технически, да, это косвенное тестирование, но также и самое прагматичное. Как бы вы еще проверили, что все взгляды придерживаются конвенций, кроме как наблюдают, что они работают?