FluentValidation и вложенный валидатор - PullRequest
2 голосов
/ 22 апреля 2019

У меня есть класс:

public class ClientInfo
{
    public string LabAccount { get; set; }
    //....
}

и класс валидатора:

public class ClientInfoFluentValidator : AbstractValidator<ClientInfo>
{
    public ClientInfoFluentValidator()
    {
        RuleFor(d => d.LabAccount)
            .NotEmpty()
            .WithMessage("LabAccount is required");

        RuleFor(d => d.LabAccount)
            .Length(8)
            .WithMessage("LabAccount is limited by 8 letters");
        //....
    }
}

тогда у меня есть класс, у которого ClientInfo класс как свойство:

public class Order
{
    public ClientInfo ClientInfo { get; set; }
    //....
}

и класс валидатора:

public class OrderFluentValidator : AbstractValidator<Order>
{
    public OrderFluentValidator()
    {
        //...
        RuleFor(d => d.ClientInfo)
            .NotNull()
            .WithMessage("ClientInfo part is required");

        RuleFor(d => d.ClientInfo)
            .SetValidator(new ClientInfoFluentValidator());
    }
}

Когда я пытаюсь проверить только ClientInfo, это работает:

    ClientInfoFluentValidator validator = new ClientInfoFluentValidator();
    [TestMethod]
    public void ClientInfoInvalidLabAccountLength()
    {
        ClientInfo model = new ClientInfo
        {
            LabAccount = "1234567"
            //....
        };

        validator.ShouldHaveValidationErrorFor(d => d.LabAccount, model);
        //....
    }

но когда я пытаюсь проверить Order класс:

    OrderFluentValidator validator = new OrderFluentValidator();
    [TestMethod]
    public void OrderInfoValid()
    {
        Order model = new Order
        {
            ClientInfo = new ClientInfo
            {
                LabAccount = "1234567"
                //....
            },
            //....
        };

        validator.ShouldHaveValidationErrorFor(d => d.ClientInfo, model);
    }

Там написано, что model класс действителен. Почему так? почему ClientInfo валидатор не работает?

1 Ответ

1 голос
/ 06 мая 2019

Необходимо указать точное свойство в модели дочернего представления, которое должно иметь сообщение об ошибке.Похоже, это проблема с утверждением, а не с вашими моделями представления или валидаторами:

validator.ShouldHaveValidationErrorFor(d => d.ClientInfo.LabAccount, model);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...