Asp.net mvc 3 如何在MVC 3中测试自定义ValidationAttribute类

Asp.net mvc 3 如何在MVC 3中测试自定义ValidationAttribute类,asp.net-mvc-3,validation,custom-attributes,Asp.net Mvc 3,Validation,Custom Attributes,我有一个自定义验证器属性,我正在尝试对其进行单元测试。在我的单元测试中,我将执行以下操作 var testModel = new TestModel(); var testContext = new ValidationContext(testModel, null, null); var attribute = new MyCustomAttribute(); attribute.Validate(testModel, testContext); 调用attribute.Validate时

我有一个自定义验证器属性,我正在尝试对其进行单元测试。在我的单元测试中,我将执行以下操作

var testModel = new TestModel();
var testContext = new ValidationContext(testModel, null, null);
var attribute = new MyCustomAttribute();

attribute.Validate(testModel, testContext);
调用
attribute.Validate
时,它正确地调用了我的
IsValid
方法,但是
attribute.Validate
void
,因此显然不会返回任何内容。任何关于如何将钩子插入
ValidationResult
的想法都将不胜感激



在阅读了
ValidationAttribute.Validate
方法之后,如果验证失败,它将抛出一个
ValidationException
,这样就回答了我的问题。

您可以像MVC使用ModelValidator一样调用验证。类似这样的情况(您在这里的里程数可能会有所不同,记不清我脑子里的所有呼叫,稍后将尝试用工作代码替换):


在这里大声思考。如果验证成功,那么错误字典中就不应该有任何验证错误——所以检查它是否为空是一个测试。然后我会用同样的方法测试特定的错误。
var modelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => model, model.GetType());

var validator = ModelValidator.GetModelValidator(modelMetadata, base.ControllerContext);

var result = validator.Validate(instance)