首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何测试ModelState?

如何测试ModelState?
EN

Stack Overflow用户
提问于 2008-11-13 02:51:25
回答 6查看 32.9K关注 0票数 51

如何测试Controller.ViewData.ModelState?我更喜欢在没有任何模拟框架的情况下这样做。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-02-26 06:24:20

当然,如果您对数据使用Repository模式,则不必使用Mock。

一些例子:http://www.singingeels.com/Articles/Test_Driven_Development_with_ASPNET_MVC.aspx

代码语言:javascript
复制
// 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.");
票数 45
EN

Stack Overflow用户

发布于 2011-04-07 19:33:29

代码语言:javascript
复制
//[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);
票数 37
EN

Stack Overflow用户

发布于 2016-07-10 14:12:07

要测试Web API,请在控制器上使用Validate方法:

代码语言:javascript
复制
var controller = new MyController();
controller.Configuration = new HttpConfiguration();
var model = new MyModel();

controller.Validate(model);
var result = controller.MyMethod(model);
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/286124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档