2009-07-03 1 views
1

Кто-нибудь знает, как создать тест для xVal или больше точки на DataAnnotations атрибутыxVal тестирование

Вот некоторые же код, который я хотел бы проверить

[MetadataType (TYPEOF (CategoryValidation))] общественный частичный класс Категория: CustomValidation { }

public class CategoryValidation 
{ 
    [Required] 
    public string CategoryId { get; set; } 

    [Required] 
    public string Name { get; set; } 

    [Required] 
    [StringLength(4)] 
    public string CostCode { get; set; } 

} 

ответ

2

Ну, тестирование должно быть довольно легко. Для меня, используя 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.

 Смежные вопросы

  • Нет связанных вопросов^_^