1

有谁知道如何为 xVal 生成测试,或者更重要的是 DataAnnotations 属性

这是我想测试的一些相同代码

[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; }

}
4

1 回答 1

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。还发现这个站点有一些使用 DataAnnotations 的示例单元测试。

于 2009-07-13T14:20:35.383 回答