음, 꽤 쉽게해야합니다 테스트. 나를 위해, 그것과 같이, NUnit과를 사용 : 이것은 당신이 DataAnnotations에 대한 검증 러너 이미 구축하고 호출 할 수있는 방법이 가정
[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.");
}
. 당신이 여기 없어 할 정말 간단한 (내가 스티브 샌더슨의 블로그에서 흠) 내가 테스트에 사용할 하나 인 경우 :
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);
}
}
: 내가 지금처럼 주자를 호출 위의 작은 샘플에서
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);
}
}
이것은 지나치게 단순하지만 작동합니다. MVC를 사용할 때 더 좋은 솔루션은 codeplex에서 얻을 수있는 Mvc.DataAnnotions 모델 바인더입니다. DefaultModelBinder에서 자신 만의 modelbinder를 쉽게 만들 수 있지만 이미 완료되었으므로 귀찮게 할 필요가 없습니다.
희망이 도움이됩니다.
추신. 또한 DataAnnotations로 작업하는 샘플 단위 테스트가있는 this site이 있습니다.