Вопрос

Я работаю с тестовым проектом на основе wadanhelpme, который основан на резкой архитектуре, NhibernateValidator и т. Д. В качестве его написанного теста IN_THE_PROFILE_TASKS_IS_ASKED_TO_CREATE_APROFILE создает объект профиля и сохраняет его без проблем.

Теперь объект профиля представляет собой тип CreateProfileDetails, который вытекает из собственного ValidatableValueObject, который наследует аналовущий интерфейс.

Проблема поверхности, когда мой класс основан на объекте, а не на их ValidatableValueObject. Когда тест запускается системой .NaullReferenceException, поскольку валидатор нулевой.

Боюсь, что я потерей решить это плохое поведение. У кого-нибудь есть несколько предложений, чтобы добраться до этого?

Спасибо,

-Тед-

Это трассировка стека:


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 

Это классовая иерархия:


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}

Исходный код здесь http://code.google.com/p/sharp-architecture/source/browse/trunk/src/sharparch/sharparch.core/domainmodel/validatableobject.cs>

Исходный код для проверки регистрации: (извините, я новый пользователь и не могу опубликовать это как ссылку, так что вам придется скопировать / вставить) whocanhelpme.codeplex.com/sourcecontrol/changeset/view/58203#883241

Это было полезно?

Решение

Авторы S # ARP Architecty и wadanhelpme? (WCHM) оба используют общий локатор службы для обеспечения реализации Sharparch.core.commonvalcaidator.ivalidator к их классам валидации.

Где архитектура S # ARP использует следующее в их SafeServiceLocator<TDependency> сорт


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

WCHM использует следующее в их ValidatableValueObject сорт


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

Люди, которые писали WCHM только окрашивали GetInstance<IValidator>() Метод для их единицы теста


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

Итак, если изменение на S # ARP Entity от WCHM ValidatableValueObject это также необходимо заглушить GetService(typeof(IValidator)) Это S # ARP собирается использовать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top