Aspnetcore: يؤدي إنشاء UrlHelper باستخدام ActionContext () إلى NullReferenceException

تم إنشاؤها على ١٥ يناير ٢٠١٩  ·  3تعليقات  ·  مصدر: dotnet/aspnetcore

صف الخلل

محاولة إنشاء URLHelper لأغراض الاختبار بمساعدة ActionContext () يلقي NullReferenceException.

لإعادة إنتاج

خطوات إعادة إنتاج السلوك:

  1. قم بإنشاء حل MVC core 2.2 فارغ
  2. قم بإنشاء مشروع اختبار xunit
  3. قم بتثبيت NuGet Microsoft.AspNetCore.Mvc.Core 2.2.0
  4. اكتب في الاختبار: var Url = new UrlHelper (new ActionContext ()) ؛
  5. اختبار المدى

سلوك متوقع

يلقي الرسالة: System.NullReferenceException: لم يتم تعيين مرجع الكائن إلى مثيل لكائن.

سياق إضافي

يمكن أيضًا العثور على تقرير الخطأ في StackOverflow:
https://stackoverflow.com/questions/54199103/trying-to-test-a-controller-with-a-urlhelper

bug

By Design area-mvc

ال 3 كومينتر

ما يحدث هنا هو أن UrlHelper يحاول الوصول إلى خاصية RouteData للخاصية ActionContext للتحقق مما إذا كانت تحتوي على قيم عليه مما يتسبب في حدوث الاستثناء. لإصلاح هذا يمكنك القيام بما يلي:

var url = new UrlHelper( new ActionContext{ RouteData = new RouteData() } );

تم توثيق هذا المُنشئ المحدد لاستخدامه في اختبار الوحدة ، وبشكل أكثر تحديدًا عندما يحتاج ActionContext ببساطة إلى تمريره ، ولكن لا يتم استخدامه بواسطة الشفرة المستهلكة. إعداده بالطريقة التي اقترحها @ navelDirt سيكون هو السبيل للذهاب.

للمضي قدمًا ، إذا كنت تنوي اختبار الوحدة إذا كان جزء من الكود ينتج عنوان url محددًا ، فستحقق نجاحًا أفضل باستخدام كعب \ mock IUrlHelper . إذا كنت بحاجة إلى التحقق من النتيجة الفعلية ، فإنني أوصي بشدة بكتابة اختبار تكامل

شكرا جزيلا لك navelDirt وpranavkm.
لقد كنت في حيرة من أمري لأنه في الإصدار الأساسي 1.1 كان يعمل بدون تعيين RouteData ، ولكن التحول إلى 2.2 تعطل. لهذا السبب اعتقدت أنه كان خطأ ... آسف للإزعاج.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات