5

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

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

我不想实例化我的控制器或调用动作。我只是想测试我的新对象是否使模型状态无效。

我希望我可以简单地写

var modelState = new ModelBindingContext<objectAModel>().validate(objectA);
4

2 回答 2

2

Brad Wilson在 DataAnnotations 上发表了一篇出色的文章


我如何测试它?

为您的模型使用 DataAnnotations 属性将验证从控制器操作移到模型绑定器中,这意味着您对控制器操作的单元测试将被简化。

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

  1. DataAnnotationsModelBinder 是否注册为默认活页夹?您只需对整个应用程序执行一次,就像您要编写的路由测试一样。
  2. 我的模型是否使用 DataAnnotations 属性正确装饰?您最终将为添加到模型中的每个验证属性编写测试。
  3. 当模型状态无效时,我的操作方法是否正确反应?您只需为每个操作方法编写一次。
于 2009-11-25T04:24:09.563 回答
0

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

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();
}

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

于 2015-02-16T21:18:12.657 回答