首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >FluentValidation ShouldHaveValidationErrorFor和SetCollectionValidator

FluentValidation ShouldHaveValidationErrorFor和SetCollectionValidator
EN

Stack Overflow用户
提问于 2015-02-05 21:57:48
回答 2查看 5.7K关注 0票数 5

我在一个FluentValidation MVC项目中使用ASP.NET库,从UI的角度来看,它正在按预期工作。违反规则会显示正确的错误。

我有一个父类,它有一个验证器和一个集合属性,其中该类型有一个验证器。它在概念上与文档中所描述的相同。

我有一个父类的验证器..。

代码语言:javascript
运行
复制
public class MyFormValidator : AbstractValidator<MyFormViewModel>

...and我在MyFormViewModel有个收藏..。

代码语言:javascript
运行
复制
public IList<ChildRow> ChildRowsAdded { get; set; }

...and我为该子类的集合创建了一个验证器.

代码语言:javascript
运行
复制
public class ChildRowValidator : AbstractValidator<ChildRow>

...and我在父验证器中使用了子验证器.

代码语言:javascript
运行
复制
RuleFor(m => m.ChildRowsAdded).SetCollectionValidator(new ChildRowValidator());

在编写一些单元测试时,我注意到ShouldHaveValidationErrorFor没有确认错误的存在。

代码语言:javascript
运行
复制
_validator.ShouldHaveValidationErrorFor(x => x.ChildRowsAdded, model);

在我的测试中,这一行似乎没有看到错误。测试失败了,消息说

FluentValidation.TestHelper.ValidationTestException :预期属性AllergyRowsAdded将出现验证错误。

如果我手动.Validate()并查看结果,我就会看到错误。

以前有人遇到过这种情况吗?在这种情况下,我还需要采取其他步骤来使用ShouldHaveValidationErrorFor吗?

EN

回答 2

Stack Overflow用户

发布于 2015-04-10 23:10:21

朱金的评论是完全正确的:

ShouldHaveValidationErrorFor方法不是为验证属性的属性而设计的,您可以阅读有关它的这里

有两种解决办法:

  1. 直接使用ShouldHaveValidationErrorFor和测试ChildRowValidator,如:_childValidator.ShouldHaveValidationErrorFor(x => x.Name, childModel); // direct descendant property can be validated
  2. 避免使用此帮助方法,并使用Assert类检查是否在ValidationResult对象中存在任何带有名称的错误,通过regexp或简单的字符串比较与数组项属性匹配。

选择一个,这样更符合你的目的。

票数 7
EN

Stack Overflow用户

发布于 2021-10-20 21:02:39

根据医生们,还有一种测试嵌套属性的方法:表示嵌套属性路径的字符串名称:

//您还可以使用字符串名称来表示无法轻松用lambda表示的属性,例如: result.ShouldHaveValidationErrorFor("Addresses.Line1");

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28354857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档