Ну, тестирование должно быть довольно легко. Для меня, используя NUnit, его так:
[Test]
[ExpectedException(typeof(RulesException))]
public void Cannot_Save_Large_Data_In_Color()
{
var scheme = ColorScheme.Create();
scheme.Color1 = "1234567890ABCDEF";
scheme.Validate();
Assert.Fail("Should have thrown a DataValidationException.");
}
Это предполагает, что вы бегун проверки для DataAnnotations уже построен и способ вызова его. Если вы не здесь действительно упрощенным один я использую для тестирования (который я стащил из блога Стива Сандерсон):
internal static class DataAnnotationsValidationRunner
{
public static IEnumerable<ErrorInfo> GetErrors(object instance)
{
return from prop in TypeDescriptor.GetProperties(instance).Cast<PropertyDescriptor>()
from attribute in prop.Attributes.OfType<ValidationAttribute>()
where !attribute.IsValid(prop.GetValue(instance))
select new ErrorInfo(prop.Name, attribute.FormatErrorMessage(string.Empty), instance);
}
}
В небольшом образце выше я называю бегуна так:
public class ColorScheme
{
[Required]
[StringLength(6)]
public string Color1 {get; set; }
public void Validate()
{
var errors = DataAnnotationsValidationRunner.GetErrors(this);
if(errors.Any())
throw new RulesException(errors);
}
}
Все это слишком упрощенно, но работает. Лучшим решением при использовании MVC является связующее устройство Mvc.DataAnnotions, которое вы можете получить от codeplex. Его достаточно легко создать собственный модельный блок от DefaultModelBinder, но не нужно беспокоиться, так как его уже сделали.
Надеюсь, это поможет.
PS. Также найдено this site, в котором есть отдельные тестовые модульные тесты, работающие с DataAnnotations.