FluentValidation和异常消息的集成测试

本文关键字:集成测试 消息 异常 FluentValidation | 更新日期: 2023-09-27 18:24:22

我使用的fluentvalidation如下:

public class ProjectValidator : AbstractValidator<Project>
{
    public ProjectValidator()
    {
        RuleFor(project => project.Name).NotEmpty().WithMessage("Project name cannot be empty.");
    }
}

在某些服务中:

IValidator<Project> _projectValidator;
_projectValidator.ValidateAndThrow(project);

集成测试的一部分:

var validationException = Assert.Throws<ValidationException>(() => projectRepository.SaveOrUpdate(project));
Assert.That(validationException.Message, Is.EqualTo("Project name cannot be empty."));

这显然不起作用,因为validationException可能包含许多错误。即使它只包含一个错误,字符串看起来也是这样的:

验证失败:--项目名称不能为空。

您将如何检查验证结果/是否包含指定的验证消息?:

项目名称不能为空。

FluentValidation和异常消息的集成测试

您可以针对validationException进行断言。错误集合:

Assert.IsNotNull(validationException.Errors.SingleOrDefault(error => error.ErrorMessage.Equals("Project name cannot be empty.")));

或者,您也可以使用FluentAssessations:进行同样的操作

validationException.Errors.Should().Contain(error => error.ErrorMessage.Equals("Project name cannot be empty."));

FluentValidations还包括一种使用FluentActions进行验证的干净方法。

FluentActions.Invoking(() => projectRepository.SaveOrUpdate(project))
.Should()
.Throw<ValidationException>()
.WithMessage("Project name cannot be empty.");

更多示例如下:https://fluentassertions.com/exceptions/