Question

Je travaille avec un projet de test basé sur WhoCanHelpMe, qui est basé sur l'architecture de Sharp, NHibernateValidator, etc. Comme son écrit le test unitaire when_the_profile_tasks_is_asked_to_create_a_profile crée l'objet de profil et il enregistre sans problème.

Maintenant l'objet profil est un type CreateProfileDetails qui dérive de leur propre ValidatableValueObject qui hérite de l'interface IValidatable.

Les surfaces problème lorsque ma classe est basée sur une entité plutôt que leur ValidatableValueObject. Lorsque le test est exécuté un System.NullReferenceException parce Validator est nulle.

Je crains que je suis à une perte pour résoudre ce mauvais comportement. Quelqu'un at-il des suggestions pour aller au fond de cette situation?

Merci,

-Ted -

Ceci est la trace de la pile:


should ask the question repository to save the new question : FailedObject reference not set to an instance of an object.
System.NullReferenceException: Object reference not set to an instance of an object.
at SharpArch.Core.DomainModel.ValidatableObject.IsValid()
at FieldAudit.Framework.Validation.ValidatableExtensions.Validate(IValidatable entity) in ValidatableExtensions.cs: line 33
at FieldAudit.Tasks.QuestionTasks.CreateQuestion(Question question) in QuestionTasks.cs: line 40
at MSpecTests.FieldAudit.Tasks.when_the_question_tasks_is_asked_to_create_a_question.b__2() in QuestionTasksSpecs.cs: line 137 

Ceci est la hiérarchie des classes:


entity = {FieldAudit.Domain.Question}
[FieldAudit.Domain.Question] = {FieldAudit.Domain.Question}
  base {SharpArch.Core.DomainModel.Entity} = {FieldAudit.Domain.Question}
    base {SharpArch.Core.DomainModel.EntityWithTypedId} = {FieldAudit.Domain.Question}
      base {SharpArch.Core.DomainModel.ValidatableObject} = {FieldAudit.Domain.Question}
        Validator = null
        base {SharpArch.Core.DomainModel.BaseObject} = {FieldAudit.Domain.Question}

Le code source est ici http://code.google.com/p/sharp-architecture/source/browse/trunk/src/SharpArch/SharpArch.Core/DomainModel/ValidatableObject.cs>

Le code source pour l'enregistrement de validation: (désolé, je suis un nouvel utilisateur et ne peut pas poster cela comme un lien de sorte que vous devrez copier / coller) whocanhelpme.codeplex.com/SourceControl/changeset/view/58203# 883241

Était-ce utile?

La solution

Les auteurs de S # arp Architecture et WhoCanHelpMe? (WCHM) aussi bien utiliser le localisateur de services communs pour fournir une implémentation de SharpArch.Core.CommonValidator.IValidator à leurs cours de validation.

Où S # arp architecture utilise ce qui suit dans leur classe SafeServiceLocator<TDependency>


service = (TDependency)ServiceLocator.Current.GetService(typeof(TDependency));

WCHM utilise ce qui suit dans leur classe ValidatableValueObject


return ServiceLocator.Current.GetInstance<IValidator>();

Les gens qui ont écrit WCHM seulement liftée la méthode GetInstance<IValidator>() pour leur test unitaire


            var validator = new Validator();
            provider.Stub(p => p.GetInstance<IValidator>()).Return(validator);

Donc, si le passage à un S # arp Entity de la WCHM ValidatableValueObject est aussi nécessaire pour bouchonner le GetService(typeof(IValidator)) que S # arp va utiliser.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top