好吧,测试它应该很容易。对我来说,使用 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。还发现这个站点有一些使用 DataAnnotations 的示例单元测试。