Проверьте правило Must с FluentValidation - PullRequest
0 голосов
/ 11 мая 2018

У меня есть это правило для проверки того, что свойство имеет допустимое значение в зависимости от списка допустимых значений в другом свойстве.

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 голосов
/ 11 мая 2018

Вы можете использовать проверку 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.");
}
...