在不对验证的实现细节进行假设的情况下,测试模型验证的最佳方法是什么(例如,DataAnnotations)。
例如,如果我有一个Customer
模型对象具有Firstname
属性,我想测试那个绑定Firstname
的缺失值属性将导致验证错误,但我不想测试如何验证他的实现。也就是说,我不想使用DataAnotations.Validate
。
我已经看到了几个不同的意见,并且没有找到一个我同意的意见。
答案 0 :(得分:1)
我最终编写了一个包装ModelValidator
并返回IEnumerable<ModelValidationResult>
的辅助方法。它要求使用您选择的验证提供程序配置MVC,但这意味着在验证实现时,测试代码无需更改:
public static IEnumerable<ModelValidationResult> Validate<TModel>(TModel model)
{
var modelMetadata = ModelMetadata.FromLambdaExpression(r => r,
new ViewDataDictionary<TModel>(model));
ModelValidator validator = ModelValidator.GetModelValidator(
modelMetadata, new ControllerContext());
return validator.Validate(model);
}
答案 1 :(得分:0)
这取决于您用于验证模型的框架。所以如果不考虑这一点,你所要求的是不可能的。默认情况下,ASP.NET MVC使用数据注释模型提供程序来调用数据注释的验证规则,如果要对其进行测试,则需要在单元测试中执行DataAnnotations.Validate
或验证模型是否使用适当的属性。
我个人使用FluentValidation.NET为unit testing my validators提供了一种优雅的方式,所以这不是一件容易的事。