1

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

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

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

    public bool rememberMe { get; set; }
}

我做了一个单元测试,我提供了一个虚假的电子邮件地址并尝试验证我的视图模型。

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

此测试的结果始终为 False。

所以我检查了我的属性,因为我认为我可能犯了一个错误:

[TestMethod]
public void Email()
{
    string email;
    var attr = new EmailAddressAttribute();

    email = "myemail@domain.com";            
    Assert.IsTrue(attr.IsValid(email));

    email = "thisisnotavalidemail.com";
    Assert.IsFalse(attr.IsValid(email)); //If this fails, the test is successfull
}

这确实通过了测试,使用完全相同的电子邮件地址。

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

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

4

1 回答 1

0

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

bool validModel= Validator.TryValidateObject(model, context, results, **true**);
于 2013-03-07T09:13:25.707 回答