【问题标题】:Asp.net FluentValidation unit testing object as nullAsp.net FluentValidation 单元测试对象为空
【发布时间】:2018-11-20 12:20:07
【问题描述】:

我正在使用 Asp.net 中的 FluentValidation 进行一些单元测试。我已经设置了一个规则,说明一个对象不允许为空,因为它将用作方法中的参数。规则是在构造函数的验证器类中制定的:

 //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:无法将空模型传递给验证。 参数名称:instanceToValidate

我该如何测试?

【问题讨论】:

    标签: asp.net unit-testing nunit fluentvalidation


    【解决方案1】:

    这个问题已经很老了,但我偶然发现了同样的问题。如果它为空,我希望流利的验证器为我验证它并且这样说而不抛出异常,而不是我明确地检查它。我找到了覆盖现有方法的解决方案,例如:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-22
      • 1970-01-01
      • 1970-01-01
      • 2015-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多