2011-02-28 77 views
0

什么是在验证的实现细节(例如DataAnnotations)上进行测试模型验证的最佳方式。没有测试实现的测试模型验证

举例来说,如果我有,有一个Firstname属性Customer模型对象,我想测试结合缺失值的Firstname属性将导致验证错误,但我不希望测试如何验证他的实施。也就是说,我不想使用DataAnotations.Validate

我已经看到了几个不同的观点,并且没有找到我认同的观点。

回答

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); 
} 
+0

那么测试项目中的mvc配置呢?怎么做 ? – Luciano 2012-05-07 22:03:24

0

这将取决于您用于验证模型的框架。所以你所要求的是不可能的,没有考虑到这一点。默认情况下,ASP.NET MVC使用数据注释模型提供程序来调用数据注释的验证规则,并且如果您想测试它,则需要在单元测试中执行DataAnnotations.Validate,或者验证您的模型是否使用了适当的属性进行了装饰。

我个人使用FluentValidation.NET它为unit testing my validators提供了一个优雅的方式,所以它不是一个麻烦。

+0

无法测试使用MVC使用相同的抽象? – 2011-02-28 13:07:58