我正在使用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)
有没有人遇到过这个,知道我错过了什么?我为嘲笑这些验证者而疯狂吗?