Asp.net FluentValidation объект тестирования объекта как ноль - PullRequest
0 голосов
/ 20 ноября 2018

Я провожу модульное тестирование с использованием FluentValidation в Asp.net.Я установил правило, гласящее, что объект не может быть нулевым, так как он будет использоваться в качестве аргумента в методе.Правило сделано в классе валидатора в конструкторе:

 //Object itself.
 RuleFor(x => x).NotNull();

Модульный тест выглядит так (я использую NUnit):

[Test]
public void RequestObjectIsNull_ExpectError()
{
    BusinessRequest request = null;
    var result = validator.Validate(request);

    Assert.IsFalse(result.IsValid);
}

Сбой с сообщением:

Сообщение: System.ArgumentNullException: Невозможно передать пустую модель в Validate.Имя параметра: instanceToValidate

Как это проверить?

1 Ответ

0 голосов
/ 27 мая 2019

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

 public class MyValidator : AbstractValidator<MyObject>
    {
        public MyValidator()
        {
            RuleSet("MyRule", () =>
            {
                RuleFor(x=>x.MyProperty=="Something").WithMessage("failed");
            });
        }

        public override Task<ValidationResult> ValidateAsync(ValidationContext<MyObjec>> context, CancellationToken cancellation = default)
        {
            return context.InstanceToValidate == null ? Task.FromResult(new ValidationResult(new[] { new ValidationFailure("MyObject", "filed with null") })) : base.ValidateAsync(context, cancellation);
        }
    }
...