我有这个规则来验证一个属性是否具有有效值,具体取决于另一个属性中允许的值列表。
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.");
}