Как я могу проверить Controller.ViewData.ModelState
? Я бы предпочел сделать это без макетов.Как я могу протестировать ModelState?
ответ
Вам не нужно использовать Mock, если вы используете шаблон хранилища для своих данных, конечно.
Некоторые примеры: http://www.singingeels.com/Articles/Test_Driven_Development_with_ASPNET_MVC.aspx
// Test for required "FirstName".
controller.ViewData.ModelState.Clear();
newCustomer = new Customer
{
FirstName = "",
LastName = "Smith",
Zip = "34275",
};
controller.Create(newCustomer);
// Make sure that our validation found the error!
Assert.IsTrue(controller.ViewData.ModelState.Count == 1,
"FirstName must be required.");
Виртуальный модификатор на ошибках был бы неплохим, увы, есть налог на организацию, который выглядит немного тяжелым для меня. – 2012-02-09 11:45:29
IMHO Лучшее решение - использовать транспортер mvc. Таким образом, вы получаете более реалистичное поведение вашего контроллера, вы должны доставить проверку модели на ее судьбу - проверку атрибутов. В приведенном ниже описании описывается это (http://stackoverflow.com/a/5580363/572612). – 2012-08-03 07:11:38
//[Required]
//public string Name { get; set; }
//[Required]
//public string Description { get; set; }
ProductModelEdit model = new ProductModelEdit() ;
//Init ModelState
var modelBinder = new ModelBindingContext()
{
ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(
() => model, model.GetType()),
ValueProvider=new NameValueCollectionValueProvider(
new NameValueCollection(), CultureInfo.InvariantCulture)
};
var binder=new DefaultModelBinder().BindModel(
new ControllerContext(),modelBinder);
ProductController.ModelState.Clear();
ProductController.ModelState.Merge(modelBinder.ModelState);
ViewResult result = (ViewResult)ProductController.CreateProduct(null,model);
Assert.IsTrue(result.ViewData.ModelState["Name"].Errors.Count > 0);
Assert.True(result.ViewData.ModelState["Description"].Errors.Count > 0);
Assert.True(!result.ViewData.ModelState.IsValid);
Мне очень нравится этот метод. Как вы заявляете, гораздо лучше при правильной проверке модели, которая была украшена атрибутами проверки. – stevethethread 2013-02-28 15:01:04
Добавление к большим ответам выше, проверить это фантастическое использование защищенного метода TryValidateModel внутри класса контроллера.
Просто создайте тестовый класс, наследуемый от контроллера, и передайте свою модель методу TryValidateModel. Вот ссылка: http://blog.icanmakethiswork.io/2013/03/unit-testing-modelstate.html
Полный кредит принадлежит Джону Райли и Марку Талари за это решение.
Для тестирования Web API, используйте метод Validate на контроллере:
var controller = new MyController();
controller.Configuration = new HttpConfiguration();
var model = new MyModel();
controller.Validate(model);
var result = controller.MyMethod(model);
- 1. Как я могу протестировать объявление?
- 2. Как я могу протестировать фильтр?
- 3. Как я могу протестировать EntitySetController
- 4. Как я могу протестировать ClassNotFoundException?
- 5. Как я могу протестировать завод?
- 6. Как я могу поддерживать ModelState с RedirectToAction?
- 7. Как я могу протестировать класс ввода консоли?
- 8. Как я могу протестировать теги друзей facebooks
- 9. Как я могу эффективно протестировать Windows API?
- 10. Как я могу эффективно протестировать скриптовый движок?
- 11. Как я могу протестировать логику базы данных?
- 12. Как я могу протестировать контроллер Symfony2?
- 13. Как я могу протестировать неопубликованное приложение?
- 14. Как я могу протестировать оператор блокировки?
- 15. Rspec: Как я могу протестировать массив?
- 16. Как я могу протестировать программы PySpark?
- 17. Как я могу протестировать приложение Curses?
- 18. Как я могу протестировать пользовательскую задачу ant?
- 19. Как я могу программно протестировать HTTP-соединение?
- 20. Как я могу протестировать библиотеку на Android?
- 21. Как я могу программно протестировать файлы cookie?
- 22. как я могу протестировать AccountsController <AbstractedResourcesController
- 23. Как я могу протестировать путь просмотра?
- 24. Asp.Net MVC - Как я могу сохранить ModelState для ChildAction?
- 25. Как я могу протестировать запрос с буквальным заданным запросом?
- 26. Как я могу протестировать хост-маршрутизатор на локальном компьютере?
- 27. Как я могу протестировать метод, содержащий статический метод?
- 28. Как я могу протестировать репозиторий, который использует DbContext с NSubstitute?
- 29. Как я могу загрузить протестировать веб-RTC групповой вызов
- 30. Как я могу протестировать тег шаблона {% url%} в оболочке?
быть более конкретными. Что вы пытаетесь проверить? – skb 2009-01-01 23:24:56