Frage

Ich bin mit einem Testprojekt arbeiten basierend auf WhoCanHelpMe, die auf Sharp Architektur, NHibernateValidator basiert, usw. Wie der geschrieben das when_the_profile_tasks_is_asked_to_create_a_profile Unit-Test das Profilobjekt erstellt und speichert es, ohne Frage.

Nun ist die Profil-Objekt ist ein CreateProfileDetails Typ, ergibt sich aus ihren eigenen ValidatableValueObject, die die IValidatable Schnittstelle erbt.

Das Problem Flächen, wenn meine Klasse auf einer Entität basiert, anstatt ihre ValidatableValueObject. Wenn der Test einen System.NullReferenceException laufen, weil Validator null ist.

Ich habe Angst, dass ich ratlos bin dieses schlechte Verhalten zu lösen. Hat jemand ein paar Vorschläge müssen den Grund zu bekommen?

Danke,

-Ted -

Dies ist der Stack-Trace:


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 

Dies ist die Klassenhierarchie:


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}

Der Quellcode ist hier http://code.google.com/p/sharp-architecture/source/browse/trunk/src/SharpArch/SharpArch.Core/DomainModel/ValidatableObject.cs>

Der Quellcode für die Validierung Anmeldung: (sorry ich bin ein neuer Benutzer und kann nicht schreiben diese als Link, damit Sie kopieren müssen würden / paste) whocanhelpme.codeplex.com/SourceControl/changeset/view/58203# 883.241

War es hilfreich?

Lösung

Die Autoren von S # arp Architektur und WhoCanHelpMe? (WCHM) beide Nutzung des Common Service Locator eine Implementierung von SharpArch.Core.CommonValidator.IValidator ihre Prüfklassen zu liefern.

Wo S # arp-Architektur nutzt die folgenden in ihrer SafeServiceLocator<TDependency> Klasse


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

WCHM verwendet die folgende in ihrer ValidatableValueObject Klasse


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

Die Leute, die WCHM nur aus dem GetInstance<IValidator>() Verfahren für ihren Unit-Test

stubbed schrieben

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

Also, wenn Wechsel zu einem S # arp Entity vom WCHM ValidatableValueObject sein auch notwendig, die GetService(typeof(IValidator)) Stub darauf hin, dass S # arp verwenden wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top