1

現在、検証属性を試していますが、カスタム検証属性を持つ EmailAddress を含む ViewModel を検証しようとしています。

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 に答える