【发布时间】:2021-10-21 05:02:39
【问题描述】:
我在 ASP.NET MVC 项目中使用 FluentValidation 库,从 UI 角度来看,它按预期工作。违反规则会显示正确的错误。
我有一个父类,它有一个验证器和一个集合属性,其中该类型有一个验证器。它在概念上与documentation 中描述的相同。
我有一个父类的验证器...
public class MyFormValidator : AbstractValidator<MyFormViewModel>
...我在MyFormViewModel...中有一个收藏集...
public IList<ChildRow> ChildRowsAdded { get; set; }
...我为该子类的集合创建了一个验证器...
public class ChildRowValidator : AbstractValidator<ChildRow>
...我在父验证器中使用该子验证器...
RuleFor(m => m.ChildRowsAdded).SetCollectionValidator(new ChildRowValidator());
在编写一些单元测试时,我注意到ShouldHaveValidationErrorFor 没有确认错误存在。
_validator.ShouldHaveValidationErrorFor(x => x.ChildRowsAdded, model);
我测试中的那一行似乎没有看到错误。测试失败,消息说
FluentValidation.TestHelper.ValidationTestException : 预期 属性 AllergyRowsAdded 的验证错误。
如果我手动 .Validate() 并查看结果,我会看到错误。
以前有人遇到过这种情况吗?在这种情况下,我是否需要采取额外的步骤才能使用 ShouldHaveValidationErrorFor?
【问题讨论】:
-
我以为你可以使用
validator.ShouldHaveValidationErrorFor(m => m.Childs[0].Name, model);,但它也不起作用。当我查看 FluentValidation 源代码时,似乎无法将ShouldHaveValidationErrorForassert 用于此类测试。 -
对于任何感兴趣的人,我在项目的讨论板上交叉发布了此内容,并在那里获得了更多详细信息。 fluentvalidation.codeplex.com/discussions/580454#post1351410
标签: asp.net-mvc fluentvalidation