كيف يمكنني أن أسخر من روتين ErrorSignal الخاص بـ Elmah؟
-
06-07-2019 - |
سؤال
نحن نستخدم ELMAH لمعالجة الأخطاء في تطبيقنا ASP.Net MVC c# وفي الاستثناءات التي تم اكتشافها، فإننا نفعل شيئًا مثل هذا:
ErrorSignal.FromCurrentContext().Raise(exception);
ولكن عندما أحاول وحدة اختبار الاستثناءات التي تم اكتشافها، أحصل على هذه الرسالة:
System.ArgumentNullException: Value cannot be null.
Parameter name: context
كيف يمكنني الاستهزاء بمكالمة FromCurrentContext()؟هل هناك شيء آخر يجب أن أفعله بدلاً من ذلك؟
لعِلمِكَ...نحن نستخدم حاليًا Moq وRhinoMocks.
شكرًا!
المحلول
منذ FromCurrentContext()
الطريقة هي طريقة ثابتة لا يمكنك ببساطة الاستهزاء بها.لديك خياران آخران.
منذ
FromCurrentContext()
يقوم بإجراء اتصال داخليًا بـHttpContext.Current
يمكنك دفع سياق مزيف في ذلك.على سبيل المثال:SimpleWorkerRequest request = new SimpleWorkerRequest( "/blah", @"c:\inetpub\wwwroot\blah", "blah.html", null, new StringWriter()); HttpContext.Current= new HttpContext(request);
مع هذا لا ينبغي أن يكون هناك استثناء بعد الآن
HttpContext.Current
هو ليس لاشيء.قم بإنشاء فئة مجمعة حول استدعاء Raise وقم فقط بالاستهزاء بفئة المجمع.
public class ErrorSignaler { public virtual void SignalFromCurrentContext(Exception e) { if (HttpContext.Current != null) Elmah.ErrorSignal.FromCurrentContext().Raise(e); } }
لا تنتمي إلى StackOverflow