C# FluentValidation与异常消息的集成测试
我正在使用fluentvalidation,如下所示:C# FluentValidation与异常消息的集成测试,c#,unit-testing,nunit,fluentvalidation,C#,Unit Testing,Nunit,Fluentvalidation,我正在使用fluentvalidation,如下所示: public class ProjectValidator : AbstractValidator<Project> { public ProjectValidator() { RuleFor(project => project.Name).NotEmpty().WithMessage("Project name cannot be empty."); } } 公共类Projec
public class ProjectValidator : AbstractValidator<Project>
{
public ProjectValidator()
{
RuleFor(project => project.Name).NotEmpty().WithMessage("Project name cannot be empty.");
}
}
公共类ProjectValidator:AbstractValidator
{
公共项目验证程序()
{
RuleFor(project=>project.Name).NotEmpty().WithMessage(“项目名称不能为空”);
}
}
在某些服务中:
IValidator<Project> _projectValidator;
_projectValidator.ValidateAndThrow(project);
IValidator\u项目验证程序;
_projectValidator.ValidateAndThrow(项目);
集成测试的一部分:
var validationException = Assert.Throws<ValidationException>(() => projectRepository.SaveOrUpdate(project));
Assert.That(validationException.Message, Is.EqualTo("Project name cannot be empty."));
var validationException=Assert.Throws(()=>projectRepository.SaveOrUpdate(project));
Assert.That(validationException.Message,Is.EqualTo(“项目名称不能为空”);
这显然不起作用,因为validationException可能包含许多错误。即使它只包含一个错误,字符串如下所示:
验证失败:--项目名称不能为空
如何检查验证结果/是否包含指定的验证消息
项目名称不能为空
您可以对validationException进行断言。错误集合:
Assert.IsNotNull(validationException.Errors.SingleOrDefault(error => error.ErrorMessage.Equals("Project name cannot be empty.")));
或者,您也可以使用以下方法执行相同操作:
谢谢我一直想使用fluentassertion—您的fluent断言方法工作得很好。谢谢。当然,不客气。我想您可能会喜欢它,并将其与FluentValidation结合使用:)
validationException.Errors.Should().Contain(error => error.ErrorMessage.Equals("Project name cannot be empty."));