Как я могу проверить пользовательские классы ValidationAttribute в MVC 3 - PullRequest
3 голосов
/ 13 октября 2011

У меня есть собственный атрибут валидатора, который я пытаюсь проверить модулем.В моем модульном тесте я делаю следующее:

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, вот такой ответ на мой вопрос.

1 Ответ

4 голосов
/ 27 октября 2011

Вы можете вызвать проверку так же, как MVC использует ModelValidator.Примерно так (ваш пробег здесь может отличаться, не могу вспомнить все звонки с макушки головы, позже попробую заменить рабочим кодом):

var modelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => model, model.GetType());

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

var result = validator.Validate(instance)
...