什么是在验证的实现细节(例如DataAnnotations)上进行测试模型验证的最佳方式。没有测试实现的测试模型验证
举例来说,如果我有,有一个Firstname
属性Customer
模型对象,我想测试是结合缺失值的Firstname
属性将导致验证错误,但我不希望测试如何验证他的实施。也就是说,我不想使用DataAnotations.Validate
。
我已经看到了几个不同的观点,并且没有找到我认同的观点。
什么是在验证的实现细节(例如DataAnnotations)上进行测试模型验证的最佳方式。没有测试实现的测试模型验证
举例来说,如果我有,有一个Firstname
属性Customer
模型对象,我想测试是结合缺失值的Firstname
属性将导致验证错误,但我不希望测试如何验证他的实施。也就是说,我不想使用DataAnotations.Validate
。
我已经看到了几个不同的观点,并且没有找到我认同的观点。
我写了一个帮手方法,包装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);
}
这将取决于您用于验证模型的框架。所以你所要求的是不可能的,没有考虑到这一点。默认情况下,ASP.NET MVC使用数据注释模型提供程序来调用数据注释的验证规则,并且如果您想测试它,则需要在单元测试中执行DataAnnotations.Validate
,或者验证您的模型是否使用了适当的属性进行了装饰。
我个人使用FluentValidation.NET它为unit testing my validators提供了一个优雅的方式,所以它不是一个麻烦。
无法测试使用MVC使用相同的抽象? – 2011-02-28 13:07:58
那么测试项目中的mvc配置呢?怎么做 ? – Luciano 2012-05-07 22:03:24