النظام.NullReferenceException مع WhoCanHelpMe اختبار الوحدة
سؤال
أنا أعمل مع اختبار المشروع على أساس WhoCanHelpMe الذي يستند إلى حادة العمارة ، NHibernateValidator ، إلخ.كما كتب when_the_profile_tasks_is_asked_to_create_a_profile وحدة اختبار يخلق كائن ملف تعريف وحفظها دون قضية.
الآن الوضع الكائن هو CreateProfileDetails النوع الذي يستمد من ValidatableValueObject الذي يرث IValidatable واجهة.
المشكلة السطوح عند صفي يقوم على كيان بدلا من ValidatableValueObject.عند الاختبار يتم تشغيل النظام.NullReferenceException لأن المصادقة باطل.
أخشى أنني في حيرة لحل هذا السلوك السيئ.هل من أحد لديه بعض الاقتراحات للحصول على الجزء السفلي من هذا ؟
شكرا
-تيد-
هذا هو تتبع المكدس:
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 العمارة WhoCanHelpMe?(WCHM) على حد سواء استخدام خدمة تحديد المواقع لتزويد تنفيذ SharpArch.الأساسية.CommonValidator.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))
أن ق#arp هو ذاهب الى استخدام.