【问题标题】: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);
}
}