كيف يمكنني أن أسخر من روتين ErrorSignal الخاص بـ Elmah؟

StackOverflow https://stackoverflow.com/questions/1019833

  •  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() الطريقة هي طريقة ثابتة لا يمكنك ببساطة الاستهزاء بها.لديك خياران آخران.

  1. منذ FromCurrentContext() يقوم بإجراء اتصال داخليًا بـ HttpContext.Current يمكنك دفع سياق مزيف في ذلك.على سبيل المثال:

    SimpleWorkerRequest request = new SimpleWorkerRequest(
        "/blah", @"c:\inetpub\wwwroot\blah", "blah.html", null, new StringWriter());
    
    HttpContext.Current= new HttpContext(request);
    

    مع هذا لا ينبغي أن يكون هناك استثناء بعد الآن HttpContext.Current هو ليس لاشيء.

  2. قم بإنشاء فئة مجمعة حول استدعاء Raise وقم فقط بالاستهزاء بفئة المجمع.

    public class ErrorSignaler {
    
        public virtual void SignalFromCurrentContext(Exception e) {
            if (HttpContext.Current != null)
                Elmah.ErrorSignal.FromCurrentContext().Raise(e);
        } 
    }
    
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top