سؤال

لقد رأيت هذا المنشور ولكني أشعر بالارتباك به.

كيف يمكنني السخرية من روتين Elmah الخاطئ؟

أنا أبحث في الخيار 2

Create a wrapper class around the call to Raise and just mock out the wrapper class.

public class ErrorSignaler {

public virtual void SignalFromCurrentContext(Exception e) {
    if (HttpContext.Current != null)
        Elmah.ErrorSignal.FromCurrentContext().Raise(e);
}

}

أنا في حيرة من أمري على الرغم من أن هذا لا يبدو أنه ينفذ واجهة ولست متأكدًا حقًا من سبب وجوده في مكانه لنوع من الميراث.

شكرًا

هل كانت مفيدة؟

المحلول

الفكرة هنا هي أنك ستستخدم ErrorSignaler الفصل في الكود الخاص بك للإشارة إلى خطأ بدلاً من استدعاء Elmah مباشرة. عند تشغيل الكود الخاص بك في اختبارات الوحدة ، لأن HttpContext.Current هل فارغ ، لن يتم استخدام مكون Elmah ، ولن يكون هناك أي استثناءات مرجعية فارغة.

يمكنك أيضا إنشاء ErrorSignaler واجهه المستخدم:

public interface IErrorSignaler
{
    void SignalFromCurrentContext(Exception e);
}

وبهذه الطريقة ، استخدم التنفيذ للتنفيذ IErrorSignaler يمكن أن يسخر من اختبارات الوحدة إذا لزم الأمر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top