سؤال

لقد كنت دائما تزوير / سخرية httpcontext بطريقة أو بأخرى في ASP.NET (أسهل بكثير في ASP.NET MVC / Monorail).

ولكن أستطيع أن أرى أن httpcontext نفسه يمكن بناء بسهولة، حرفيا مع بضع خطوط من التعليمات البرمجية.

var tw = new StringWriter();
var workerReq = new SimpleWorkerRequest("/webapp", @"c:\here\there\wwwroot", "page.aspx", tw);
var context = new HtpContext(workerReq);

إذا كنا سنلف هذا الرمز إلى شيء مثل هذا يجب أن تعمل بشكل جيد، وربما يمكننا حتى تقديم ASPX باستخدام ذلك:

using(Simulate.HttpContext()) {
  HttpContext.Current.BlaBla;
}

وبالتالي فإن الأسئلة هي:

  1. أسباب لا ينبغي القيام به.
  2. أسباب يجب القيام به.
  3. لماذا لا يستخدم على نطاق واسع (في الواقع أنا لا أتذكر أي منشورات حول هذا الموضوع).

أتذكر وظيفة واحدة حيث شيدت Vill Haack httpccontext باستخدام خارقة الانعكاس.
ولكن يبدو أنه ليس هناك حاجة فقط.

هتافات،
dmitriy.

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

المحلول

من الجيد القيام باختبار بسيط للغاية، ولكن كيف يمكنك اختبار مكونات تستخدم httprequest.files؟ بقدر ما أعرف أنه لا توجد واجهات برمجة تطبيقات عامة للسماح لك بتحديد ذلك على العامل البسيط. حتى إذا تمكنت من العثور على موقع حيث يمكنك تعيين خاصية httpFilecollection، لاحظ أن منشئه داخلي، لذلك لا يمكنك حتى إنشاء مثيل من هذا النوع.

httprequest.files غير وحده في هذا الصدد، وفي الواقع ربما يكون هناك المزيد من الأشياء التي أنت لا اختبار مع تنفيذ HTTPCCONTEXT الحالي أكثر منك يمكن اختبار. هذا هو المكان الذي تأتي فيه التجريدات مفيدة حقا.

نصائح أخرى

هناك بضعة سيناريوهات للنظر فيها.

السيناريو واحد: أنت اختبار الوحدة. لديك شيء صغير، مثل الطبقة التي تدير الوصول إلى ذاكرة التخزين المؤقت، والتي تستدعي httpcontent.cache صراحة. في هذه الحالة، يسخر من السياق حتى تتمكن من رؤية المكالمات التي يتم إجراؤها، وما إذا كانت تعمل WY التي تتوقعها.

السيناريو الثاني: أنت تقوم باختبار التكامل، حيث تحاول اختبار شيء كبير مثل جيل صفحة معقدة. في هذه الحالة، اعطائها كائن httpcontent الحقيقي بالطريقة التي وجدتها. سيؤدي اختبار التكامل الخاص بك بشكل أفضل إلى محاكاة وقت التشغيل الحقيقي.

التي قد تعمل، ولكن ...

  • أولا أرى بعض المسارات، قد تكون مختلفة في البيئات.
  • ثانيا هل يحتاج إلى شيء مثل IIS مثبت؟
  • كم من الوقت يستغرق لإنشاءه؟ إذا كان لدي 100 اختبار تحتاج إليه ويستغرق الأمر 1 ثانية، فهذا يعني أن الاختبار الخاص بي يعمل في الدقيقة أو أكثر أطول ويؤدي إلى المطورين الذين يشغلون اختبارات أقل.
  • ما مدى سهولة استخدام ذاكرة التخزين المؤقت وهمية / الإعداد، طلب وما إلى ذلك لإنشاء سيناريو الاختبار؟

السخرية / stubbing ربما أسهل.

تعديل

وجدت بعض التعليمات البرمجية المصدر ل HttpContext و SimpleWorkerRequest في مشروع أحادي:

تلك يمكن أن تعطي رؤية أفضل ما يحدث في الخلق.

وجدت مقالا ما قد يكون مفيدا كذلك: ASP.NET Createapplicationhost / SimpleworkerRequest Api Hole

هذا يوضح في الواقع بشكل جيد أننا نحتاج إلى فهم ما يحدث في هذه الكائن قبل تطبيقها ويستغرق الأمر بعض الوقت. السخرية تبدو أسهل.

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