字段匹配时的FluentValidation测试

时间:2014-06-17 16:48:37

标签: unit-testing fluentvalidation

我试图对一个验证器进行单元测试,当有两个字段匹配时,我会检查这个验证器 - 但我完全不知道如何完成它。

我已经尝试了

var validator = new CreateUserValidator();
validator.ShouldHaveValidationErrorFor(user => user.Password.Equals(user.PasswordConfirmation));

但是没有重载的ShouldHaveValidationErrorFor需要1个参数。如果没有声明局部变量并将值设置为PasswordConfirmation的值,我将不知道如何有效地测试它。

有没有人有任何想法?

1 个答案:

答案 0 :(得分:2)

老实说,我发现扩展程序有点令人困惑,与Fluent Validator本身一样(这只是我的看法)但是一旦你习惯了它,扩展和产品就很有用。

对于你的问题, 你需要

一个。第一个参数说明为

设置验证器的字段/属性

湾具有违反/继承规则验证的对象。

请参阅下面的代码。

 [TestFixture]
 public class Tests
 {
    [Test]
    public void NameEqualTest()
    {
        var v = new PersonValidator();
        var p = new Person() {Name1 = "Name2", Name2 = "Name2"};

        //I prefer this..
        //ValidationResult validationResult = v.Validate(p);
        //Assert.True(validationResult.IsValid);

        v.ShouldNotHaveValidationErrorFor(person => p.Name1, p);
    }
 }

使用ShouldNotHaveValidationErrorFor,因为它不那么混乱.. 当2个属性相等时,测试通过。即没有验证错误。

如果2个属性不相等,则会出错。

 public class Person
 {
    public string Name1 { get; set; }
    public string Name2 { get; set; }
 }

 public class PersonValidator : AbstractValidator<Person>
 {
    public PersonValidator()
    {
        RuleFor(x => x.Name1).Equal(x => x.Name2)
            .WithMessage("names are not equal");
    }
 }