J'utilise la fluentvalidation pour effectuer une validation de modèle. J'ai une classe avec plusieurs classes imbriquées ou des collections de classes, chacune avec leur propre IValidator. Initialement, je faisais quelque chose comme ça pour mettre en place les validateurs imbriqués:test de modèle complexe avec validation imbriquée
RuleFor(foo => foo.Header).SetValidator(new FooHeaderValidator());
Cela fonctionne très bien. Comme j'ai commencé à implémenter plus de validateurs imbriqués, j'ai commencé à réaliser à quel point mes tests unitaires étaient fragiles pour la validation de haut niveau. Fondamentalement, toute modification apportée aux validateurs enfants peut provoquer un comportement inattendu et entraîner l'échec des tests. Évidemment, cela est dû à mon instanciation des validateurs enfants directement. Je prends maintenant cette dépendance dans l'injection via le constructeur. Cela me permet de simuler le FooHeaderValidator
.
J'ai maintenant des tests échouant avec des exceptions null reference
venant de quelque part dans la validation courante. Je ne peux que supposer que quelque part sur la ligne on demande quelque chose que ma maquette ne fournit pas. Ceci est la trace de la pile de 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)
Quelqu'un at-il rencontré ce avant et savoir ce que je suis absent? Suis-je fou de se moquer de ces validateurs?