我正在使用 fluentvalidation 进行模型验证。我有一个包含几个嵌套类或类集合的类,每个类都有自己的 IValidator。最初我正在做这样的事情来设置嵌套验证器:
RuleFor(foo => foo.Header).SetValidator(new FooHeaderValidator());
这很好用。
当我开始实现更多的嵌套验证器时,我开始意识到我的单元测试对于顶级验证是多么脆弱。基本上,对子验证器的任何更改都可能导致意外行为并导致测试失败。显然这是由于我直接实例化了子验证器。我现在通过构造函数注入来获取这种依赖关系。这让我可以模拟FooHeaderValidator
.
我现在有测试失败,null reference
异常来自流利验证的某个地方。我只能假设在某个地方有人要求我的模拟没有提供。这是来自 fluentvalidation 的堆栈跟踪:
at FluentValidation.Validators.ChildValidatorAdaptor.Validate(PropertyValidatorContext context)
at FluentValidation.Validators.DelegatingValidator.Validate(PropertyValidatorContext context)
at FluentValidation.Internal.PropertyRule.InvokePropertyValidator(ValidationContext context, IPropertyValidator validator, String propertyName)
at FluentValidation.Internal.PropertyRule.<Validate>d__8.MoveNext()
at System.Linq.Enumerable.<SelectManyIterator>d__14`2.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList(IEnumerable`1 source)
at FluentValidation.AbstractValidator`1.Validate(ValidationContext`1 context)
at FluentValidation.AbstractValidator`1.Validate(T instance)
有没有人遇到过这个并知道我错过了什么?我是不是因为嘲笑这些验证者而疯狂?