2014-02-13 53 views
0

我有下面的类流利的验证测试工作不

public class PasswordValidator : AbstractValidator<PasswordContainer> 
    { 
     public PasswordValidator() 
     { 
      SimpleValidations(); 
     } 

     private void SimpleValidations() 
     { 
      RuleFor(x => x.Password.Length).GreaterThanOrEqualTo(8).WithMessage("Password too short."); 
      RuleFor(x => x.Password.Length).LessThanOrEqualTo(255).WithMessage("Password too long."); 
     } 
} 

PasswordContainer看起来像这样

public class PasswordContainer 
    { 
     public PasswordContainer() 
     { 
     } 

     public string Password { get; set; } 
    } 

现在,当我运行这一点,并用它来验证输入的密码,这一切按预期工作。但是,当我创建一个单元测试时,它会失败

[Test] 
     public void Validate_WhenPasswordTooShort_ShouldReturnError() 
     { 
      var subject = fixture.Create<PasswordValidator>(); 
      subject.ShouldHaveValidationErrorFor(b => b.Password, new PasswordContainer() { Password = "pass" }); 
     } 

此测试不起作用。我得到一个错误说

“预计财产密码验证错误”

这是为什么不工作?

回答

1

您应该在设置规则时指定相同的表达式,就像在测试中一样。 GreaterThanOrEqualTo可能在数字属性上效果最佳。

试试这个:

RuleFor(x => x.Password) 
.Length(8, 255) 
.WithMessage("Password should be between 8 and 255 characters.")