我正在使用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)
有沒有人遇到過這個,知道我錯過了什麼?我爲嘲笑這些驗證者而瘋狂嗎?