单元测试属性dataannotations验证器

时间:2014-07-21 10:24:22

标签: c# asp.net-mvc unit-testing

我正在使用DataAnnotations进行模型验证

using System.ComponentModel.DataAnnotations;

namespace MvcApplication2.Models
{
    public class Fiz
    {
        [Required]
        public string Name { get; set; }

        [Required]
        [RegularExpression(".+@..+")]
        public string Email { get; set; }

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

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

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

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

// test class
[TestMethod]
public void EmailRequired()
{
    var fiz = new Fiz 
    {

        Email = "exemple"
    };

    Assert.IsTrue(ValidateModel(fiz).Count > 0);
}

private IList<ValidationResult> ValidateModel(object model)
{
    var validationResults = new List<ValidationResult>();
    var ctx = new ValidationContext(model, null, null);
    Validator.TryValidateObject(model, ctx, validationResults, true);
    return validationResults;
}

我想测试电子邮件的问题,但在这种情况下,我必须给fiz.Name; fiz.adress; .....

一个值

任何解决方案? 认为

2 个答案:

答案 0 :(得分:1)

查看AutoFixture

https://github.com/AutoFixture

它可以使用数据来保护您的实体,因此您只需要关注自己想要测试的属性。

非常适合在几行代码中创建测试实体

答案 1 :(得分:0)

如果您确实要测试数据注释是否正确放置,则需要向每个字段提供数据(手动或使用某些第三方工具)。但是命中可能不是一个坏主意,因为你可以为每个整个对象创建一个测试并对validationResults的内容进行断言;