我在一个FluentValidation MVC项目中使用ASP.NET库,从UI的角度来看,它正在按预期工作。违反规则会显示正确的错误。
我有一个父类,它有一个验证器和一个集合属性,其中该类型有一个验证器。它在概念上与文档中所描述的相同。
我有一个父类的验证器..。
public class MyFormValidator : AbstractValidator<MyFormViewModel>
...and我在MyFormViewModel
有个收藏..。
public IList<ChildRow> ChildRowsAdded { get; set; }
...and我为该子类的集合创建了一个验证器.
public class ChildRowValidator : AbstractValidator<ChildRow>
...and我在父验证器中使用了子验证器.
RuleFor(m => m.ChildRowsAdded).SetCollectionValidator(new ChildRowValidator());
在编写一些单元测试时,我注意到ShouldHaveValidationErrorFor
没有确认错误的存在。
_validator.ShouldHaveValidationErrorFor(x => x.ChildRowsAdded, model);
在我的测试中,这一行似乎没有看到错误。测试失败了,消息说
FluentValidation.TestHelper.ValidationTestException :预期属性AllergyRowsAdded将出现验证错误。
如果我手动.Validate()
并查看结果,我就会看到错误。
以前有人遇到过这种情况吗?在这种情况下,我还需要采取其他步骤来使用ShouldHaveValidationErrorFor
吗?
发布于 2015-04-10 23:10:21
朱金的评论是完全正确的:
ShouldHaveValidationErrorFor
方法不是为验证属性的属性而设计的,您可以阅读有关它的这里。
有两种解决办法:
ShouldHaveValidationErrorFor
和测试ChildRowValidator
,如:_childValidator.ShouldHaveValidationErrorFor(x => x.Name, childModel); // direct descendant property can be validated
Assert
类检查是否在ValidationResult
对象中存在任何带有名称的错误,通过regexp或简单的字符串比较与数组项属性匹配。选择一个,这样更符合你的目的。
发布于 2021-10-20 21:02:39
根据医生们,还有一种测试嵌套属性的方法:表示嵌套属性路径的字符串名称:
//您还可以使用字符串名称来表示无法轻松用lambda表示的属性,例如: result.ShouldHaveValidationErrorFor("Addresses.Line1");
https://stackoverflow.com/questions/28354857
复制相似问题