كيف يمكنني اختبار دقة المسار/الإجراء لعنوان URL مع سلسلة الاستعلام؟
-
04-10-2019 - |
سؤال
أحاول استخدام التعليمات البرمجية مثل ما يلي في اختبارات الوحدة الخاصة بي ،
/* 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
سيتم تهيئة المعلمات إلى قيمها من المسار.
نصائح أخرى
ربما ستساعد هذه المقالات من Phil Haack: