Unit testing 自定义数据注释在单元测试中未触发

Unit testing 自定义数据注释在单元测试中未触发,unit-testing,validation,data-annotations,Unit Testing,Validation,Data Annotations,我目前正在试验验证属性, 现在我正在尝试验证我的ViewModel,它包含一个带有自定义验证属性的EmailAddress public class UserLoginModel { [Required] [EmailAddress] public string email { get; set; } [Required] public string password { get; set; } public bool rememberMe {

我目前正在试验验证属性, 现在我正在尝试验证我的ViewModel,它包含一个带有自定义验证属性的EmailAddress

public class UserLoginModel
{
    [Required]
    [EmailAddress]
    public string email { get; set; }

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

    public bool rememberMe { get; set; }
}
我做了一个单元测试,给出了一个错误的电子邮件地址,并试图验证我的viewmodel

[TestMethod]
public void TestingInvalidEmailAddress()
{
    UserLoginModel model = new UserLoginModel();
    model = GetAValidLoginModel(); //Get a default-model where all parameters are correct
    model.email = "thisisnotavalidemail.com";

    ValidationContext context = new ValidationContext(model, null, null);
    var results = new List<ValidationResult>();
    bool validModel= Validator.TryValidateObject(model, context, results);
    //This is always true

    Assert.IsFalse(validModel);
}
而这确实通过了测试,使用了完全相同的电子邮件地址

当我在浏览器中测试它时,它也会正确验证

那么为什么在第一个测试方法中它不告诉我我的电子邮件地址无效呢?

我在中找到了我的解决方案。 显然,我只是缺少一个额外的参数

bool validModel= Validator.TryValidateObject(model, context, results, **true**);

嗯,你提到了“自定义”验证属性。你是说[EmailAddress]属性不是.NET属性吗?不,我使用的是.NET4.0,EmailAddress在.NET4.5.mkay中是唯一标准的,因为我尝试了与.NET属性相同的方法。完全相同的问题。奇怪的是,[Required]属性确实像预期的那样工作。我刚刚又做了一次尝试,我发现了这篇文章:这很有效。我不敢相信我之前没找到这个。我只是错过了一个额外的参数啊哈哈:)好东西。已经被提升的人做不了更多:)
bool validModel= Validator.TryValidateObject(model, context, results, **true**);