كيف يمكنني اختبار دقة المسار/الإجراء لعنوان URL مع سلسلة الاستعلام؟

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

سؤال

أحاول استخدام التعليمات البرمجية مثل ما يلي في اختبارات الوحدة الخاصة بي ،

/* Test setup code */
_routes = RouteTable.Routes;
MvcApplication.RegisterRoutes(_routes); //set up the routes as they would be in actual application
/* test code */
Expression<Func<SearchController, ActionResult>> actionFunc;
actionFunc = action => action.Results("x", 3, null);
RouteTestingExtensions.Route(
   "~/Search/Results?searchText=x"
).ShouldMapTo<SearchController>(actionFunc);

المشكلة هي أن هذا يفشل مع "النتائج المتوقعة من خلال النتائج؟ SearchText = x"

هل لدى أي شخص حل يسمح لي باختبار أن عنوان URL (مع سلسلة الاستعلام) يحل إلى وحدة التحكم الصحيحة والإجراءات والوسائط الصحيحة؟

لمعلوماتك ، ليس لدي إعداد مسار صريح في Global.asax.cs ، حيث أن المسار الافتراضي يعمل للتطبيق الفعلي - إنه لا يعمل في هذا الاختبار.

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

المحلول

IMHO من المنطقي اختبار الوحدة فقط طرق مخصصة. إن اختبار معلمات سلسلة الاستعلام التي سيتم ترجمتها إلى وسيطات إجراء تحكم أمر غير ضروري ولا يجلب حقًا أي قيمة إلى تطبيقك. يتم هذا العمل من خلال موثق النموذج الافتراضي ويتم اختباره على نطاق واسع بواسطة Microsoft (آمل).

هذا يقال MVCContrib.TestHelper يتيح لك اختبار الطرق المخصصة بأناقة. لنفترض على سبيل المثال أنك قمت بتطبيق الترحيل في تطبيقك وحددت طريقًا مخصصًا للحصول على عناوين URL جميلة لكبار المسئولين الاقتصاديين:

routes.MapRoute(
    "Custom",
    "foo/{startPage}/{endPage}",
    new 
    { 
        controller = "Search", 
        action = "Results", 
    }
);

وهنا هي وحدة التحكم المرتبطة بها:

public class SearchController : Controller
{
    public ActionResult Results(int startPage, int endPage)
    {
        return View();
    }
}

يمكن اختبار هذا المسار مثل هذا:

"~/foo/10/20".ShouldMapTo<SearchController>(c => c.Results(10, 20));

سيختبر هذا بشكل فعال أن وحدة التحكم الافتراضية Search, الإجراء الافتراضي هو Results وهذا كلاهما startPage و endPage سيتم تهيئة المعلمات إلى قيمها من المسار.

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