使用 FluentValidation 测试必须规则



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

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

如何改进验证器或测试?

可以使用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.");
}

相关内容

  • 没有找到相关文章

最新更新