C# 单FluentValidation规则失败时引发异常

C# 单FluentValidation规则失败时引发异常,c#,.net,fluentvalidation,C#,.net,Fluentvalidation,使用FluentValidation,是否可以在单个规则失败时引发异常?例如,我想调用Validate()并让下面的第一条规则简单地进行验证,但第二条规则在false时抛出异常 RuleFor(x => x.Title) .NotEmpty() .WithMessage("Please add a title for the project"); RuleFor(x => x.UserId) .NotEmpty() .WithMessage("Use

使用FluentValidation,是否可以在单个规则失败时引发异常?例如,我想调用Validate()并让下面的第一条规则简单地进行验证,但第二条规则在false时抛出异常

RuleFor(x => x.Title)
    .NotEmpty()
    .WithMessage("Please add a title for the project");

RuleFor(x => x.UserId)
    .NotEmpty()
    .WithMessage("User not supplied");

我可能是想强迫FluentValidation做一些它不打算做的事情。我知道ValidateAndThrow()方法,但这将在任何失败时引发异常。

是。试着做些类似的事情-

将FluentValidation和FluentValidation.TestHelper添加到指令中

    private readonly IValidator<ItemViewModel> validator = new ItemValidator(); 
    //Assumes your fluent validation is in ItemValidator and your view model is ItemViewModel

    [Test]
    public void Headline_ShouldNotBeEmpty()
    {
        validator.ShouldHaveValidationErrorFor(f => f.message, string.Empty);
    }
private readonly IValidator validator=new ItemValidator();
//假设fluent验证在ItemValidator中,并且视图模型为ItemViewModel
[测试]
公共无效标题\u不应为空()
{
应保存ValidationErrorFor(f=>f.message,string.Empty);
}

通常情况下,最好验证所有属性,然后报告结果,尽管在某些情况下,继续验证没有意义(在我的情况下,是在请求中缺少“租户”标识符时)

只需将第二条规则更改为如下内容(使用Automapper 5.2,C#6进行测试):

  • 如果调用
    IValidator.Validate(…)
    并且第一条规则失败,那么它将简单地列在结果的
    Errors
    列表中
  • 如果第二条规则失败,调用
    Validate
    将引发
    ArgumentException
    ,显然不会返回结果
  • 如果调用
    ValidateAndThrow
    扩展方法,则如果第二条规则失败,它将简单地返回、抛出
    ArgumentException
    ,或者如果另一条规则失败,则抛出
    ValidationException

好的,您建议为特定的属性/对象设置一个验证器类,在我上面的示例中,这将是UserId。这个验证器的唯一目的是在用户ID验证失败时抛出异常?因为最初的问题不是关于测试,而是关于实际的规则定义本身。
RuleFor(x => x.Title)
    .NotEmpty()
    .WithMessage("Please add a title for the project");

RuleFor(x => x.UserId)
    .NotEmpty()
    .OnAnyFailure(x =>
    {
        throw new ArgumentException(nameof(x.UserId));
    });