Обычно я тестирую настройки проверки модели напрямую, вызывая методы фасада System.ComponentModel.DataAnnotations.Validator.
Я написал статью на эту тему http://timoch.com/blog/2013/06/unit-testing-model-validation-with-mvcs-dataannotations/
Я получаю код, подобный этому (в статье показан базовый класс модульных тестов для более чистого и многократного использования для проверки модели)
[Test]
[TestCaseSource("ValidationRule_Source")]
public void ValidationRule(ValidateRuleSpec spec) {
// Arrange
var model = CreateValidPersonModel();
// Apply bad valud
model.GetType().GetProperty(spec.MemberName).SetValue(model, spec.BadValue);
// Act
var validationResults = new List<ValidationResult>();
var success = Validator.TryValidateObject(model, new ValidationContext(model), validationResults, true);
// Assert
Expect(success, False);
Expect(validationResults.Count, EqualTo(1));
Expect(validationResults.SingleOrDefault(r => r.MemberNames.Contains(spec.MemberName)), Not.Null);
}
public IEnumerable<ValidateRuleSpec> ValidationRule_Source() {
yield return new ValidateRuleSpec() {
BadValue = null,
MemberName = "FirstName"
};
yield return new ValidateRuleSpec() {
BadValue = string.Empty,
MemberName = "FirstName"
};
yield return new ValidateRuleSpec() {
BadValue = null,
MemberName = "LastName"
};
/* ... */
}
Мне не нравится, что доверяющий код просто работает, поэтому я систематически пишу модульный тест для кода проверки моей модели. Тем не менее, я доверяю связующему фреймворка / модели для выполнения валидации.
Этот модульный тест позволяет мне написать контроллер, который доверяет валидации.