使用FluentValidation

时间:2018-05-11 17:14:22

标签: c# .net nunit fluentvalidation fluentvalidation-2.0

我有这个规则来验证属性是否具有有效值,具体取决于另一个属性中的允许值列表。

model.RuleFor(c => c)
.Must(c => string.IsNullOrEmpty(c.CurrentValue) || (!string.IsNullOrEmpty(c.CurrentValue) && c.AllowedValues.Contains(c.CurrentValue)))

工作正常,但我想创建一个单元测试,但总是失败。我认为是因为RuleFor不是特定属性而是对象本身。

this.validator.ShouldNotHaveValidationErrorFor(c => c.CurrentValue, this.model);

如何改进验证器或测试?

1 个答案:

答案 0 :(得分:0)

您可以使用Custom验证,以便将验证失败与特定属性联系起来:

model.RuleFor(c => c.CurrentValue).NotEmpty();

model.When(c => !string.IsNullOrEmpty(c.CurrentValue), () => Custom(CurrentValueIsAllowed));

private ValidationFailure CurrentValueIsAllowed(YourModelType c)
{
    if(c.AllowedValues.Contains(c.CurrentValue))
    {
        return null;
    } 

    return new ValidationFailure("CurrentValue", "Value is not allowed.");
}