سؤال

أرغب في اختبار طريقة مثل ما يلي:

public ActionResult StoreFile(FormCollection form, string _paginaAtual)
{
     Session["MySession"] = 1
     if (Request.Files["uploadedFiles"] != null)
         {
             //do something about the file
         }
     return View()
}

يقع داخل فئة وحدة تحكم "Somecontroller.cs" ويتم استدعاؤه عندما يقدم المستخدم ملفًا في إدخال إدخال بسيط = "ملف" HTML.

PS: Purists حذار: أعرف أن هذا ليس اختبار وحدة "نقي" ، أريد فقط استدعاء الطريقة في بيئة الاختبار والتحقق مما إذا كان قد قام بتغييرات مرغوبة في النظام.

شكرا لكم جميعا على أي ضوء في هذا الموضوع ، لينكس.

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

المحلول

لحسن الحظ ، فكر فريق ASP.NET في هذا الأمر قبل أن يبدأوا على MVC وأنشأوا مساحة اسم System.Web.Abstractions. إنها سلسلة من الفئات الأساسية التي تعكس الطبقات الثابتة التي من المستحيل اختبارها تقليديًا مثل فئة httpwebrequest.

ما تريد القيام به هو الاعتماد على أحد هذه الفصول الأساسية والقيام بقليل من حقن التبعية من أجل السخرية من جلستك بشكل فعال.

HttpSessionStateBase _session;
public HttpSessionStateBase Session
{
    get{
        return _session ?? (_session = new HttpSessionStateWrapper(HttpContext.Current.Session));
    }
    set{
        _session = value;
    }
}

أما بالنسبة إلى FormCollection ، فلا يتعين عليك السخرية من ذلك ، حيث يجب أن تكون قادرًا على إنشاء واحدة بصرف النظر عن HTTPContext. هناك مثال جيد على ذلك مدونة ماركوس هاماربرغ.

نصائح أخرى

ما تصفه يبدو أشبه باختبار التكامل. بالنسبة إلى FormCollection ، إذا كنت ترغب في عزله ، فيمكنك استخدام إطار عزل مثل Rhinomocks ، أو "لفة اليد" الخاصة بك.

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