Asp.net mvc ASP.NET MVC 2中的模型绑定测试

Asp.net mvc ASP.NET MVC 2中的模型绑定测试,asp.net-mvc,unit-testing,modelbinders,modelstate,defaultmodelbinder,Asp.net Mvc,Unit Testing,Modelbinders,Modelstate,Defaultmodelbinder,第一,;我知道我不需要测试MVC的内部结构,但我真的需要一个套件来测试流入系统的数据 我希望在不模拟所有HTTP上下文的情况下,如何测试objectA(表单集合、dict、集合、对象等)是否符合objectAModel 我希望不必实例化我的控制器或调用操作。我只是想测试我的新对象是否使modelstate无效 我希望我能简单地写作 var modelState = new ModelBindingContext<objectAModel>().validate(objectA);

第一,;我知道我不需要测试MVC的内部结构,但我真的需要一个套件来测试流入系统的数据

我希望在不模拟所有HTTP上下文的情况下,如何测试objectA(表单集合、dict、集合、对象等)是否符合objectAModel

我希望不必实例化我的控制器或调用操作。我只是想测试我的新对象是否使modelstate无效

我希望我能简单地写作

var modelState = new ModelBindingContext<objectAModel>().validate(objectA);
var modelState=new ModelBindingContext().validate(objectA);
布拉德·威尔逊有一个


如何测试它

使用DataAnnotations属性 为您的模型移动验证 离开控制器动作,进入控制器动作 模型活页夹,即您的 控制器操作的单元测试 将被简化

当你为此编写测试时, 您需要验证三件事:

  • DataAnnotationsModelBinder是否已注册 作为默认活页夹? 对于整个应用程序,您只需执行一次,就像路由一样 你会写的测试
  • 我的模型是否正确地装饰了DataAnnotations属性? 最后,您将为添加的每个验证属性编写测试 给你的模特
  • 当模型状态无效时,我的操作方法是否正确反应? 每个操作方法只需编写一次

  • 非常简单,您可以实现一个方法,为您的模型类型提取
    ModelMetadata
    ,获取
    modelvalidater
    ,并验证模型对象

    public bool IsModelValid<T>(T model) where T : class
    {
        var metaData = ModelMetadataProviders.Current.GetMetadataForType(() => model, typeof(T));
        var validator = ModelValidator.GetModelValidator(metaData, new ControllerContext());
        var validationResults = validator.Validate(model);
        return 0 == validationResults.Count();
    }
    
    public bool IsModelValid(T模型),其中T:class
    {
    var metaData=modelmataproviders.Current.GetMetadataForType(()=>model,typeof(T));
    var validator=modelvalidater.getmodelvalidater(元数据,newcontrollercontext());
    var validationResults=validator.Validate(模型);
    返回0==validationResults.Count();
    }
    

    所谓“简单”,我的意思是这不一定要考虑所有可能的配置,但您可以对模型的有效性进行基本检查。

    然后我就可以进行如下测试:Assert.isTrue(new ModelBindingContext().validate(objectA));这将只测试模型是否用正确的属性修饰。