How can I test ModelState?

前端 未结 6 1403
轮回少年
轮回少年 2020-12-04 21:42

How can I test Controller.ViewData.ModelState? I would prefer to do it without any mock framework.

6条回答
  •  独厮守ぢ
    2020-12-04 21:58

    //[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);
    

提交回复
热议问题