سؤال
لقد رأيت هذا المنشور ولكني أشعر بالارتباك به.
كيف يمكنني السخرية من روتين 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
يمكن أن يسخر من اختبارات الوحدة إذا لزم الأمر.
لا تنتمي إلى StackOverflow