محاولة إنشاء URLHelper لأغراض الاختبار بمساعدة ActionContext () يلقي NullReferenceException.
خطوات إعادة إنتاج السلوك:
يلقي الرسالة: System.NullReferenceException: لم يتم تعيين مرجع الكائن إلى مثيل لكائن.
يمكن أيضًا العثور على تقرير الخطأ في StackOverflow:
https://stackoverflow.com/questions/54199103/trying-to-test-a-controller-with-a-urlhelper
ما يحدث هنا هو أن UrlHelper
يحاول الوصول إلى خاصية RouteData
للخاصية ActionContext
للتحقق مما إذا كانت تحتوي على قيم عليه مما يتسبب في حدوث الاستثناء. لإصلاح هذا يمكنك القيام بما يلي:
var url = new UrlHelper( new ActionContext{ RouteData = new RouteData() } );
تم توثيق هذا المُنشئ المحدد لاستخدامه في اختبار الوحدة ، وبشكل أكثر تحديدًا عندما يحتاج ActionContext
ببساطة إلى تمريره ، ولكن لا يتم استخدامه بواسطة الشفرة المستهلكة. إعداده بالطريقة التي اقترحها @ navelDirt سيكون هو السبيل للذهاب.
للمضي قدمًا ، إذا كنت تنوي اختبار الوحدة إذا كان جزء من الكود ينتج عنوان url محددًا ، فستحقق نجاحًا أفضل باستخدام كعب \ mock IUrlHelper
. إذا كنت بحاجة إلى التحقق من النتيجة الفعلية ، فإنني أوصي بشدة بكتابة اختبار تكامل
شكرا جزيلا لك navelDirt وpranavkm.
لقد كنت في حيرة من أمري لأنه في الإصدار الأساسي 1.1 كان يعمل بدون تعيين RouteData ، ولكن التحول إلى 2.2 تعطل. لهذا السبب اعتقدت أنه كان خطأ ... آسف للإزعاج.