[c#] كيف يجب على وحدة واحدة اختبار وحدة تحكم .NET MVC؟



Answers

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

عندما تتحدث عن المنطق المعقد ، فهذا لا يعني بالضرورة أن هذا المنطق لا يمكن فصله في طبقات مختلفة ويتم اختبار كل وحدة بمعزل عن غيرها.

Question

أنا أبحث عن المشورة فيما يتعلق باختبار وحدة فعالة من وحدات التحكم .NET mvc.

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

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

هل يمكن لأي شخص أن يقترح بعض الأساليب الأفضل لاختبار وحدة التحكم أو يشرح لماذا تعتبر الطرق السابقة صالحة / مفيدة؟

شكر!




نعم ، يجب عليك اختبار كل الطريق إلى DB. الوقت الذي تضعه في السخرية أقل والقيمة التي تحصل عليها من السخرية أقل من اللازم (80٪ من الأخطاء المحتملة في النظام الخاص بك لا يمكن أن يتم انتقاؤها بالسخرية).

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

هنا كيف يعمل فريقنا. تقوم كل فئة اختبار في البداية بتجديد قاعدة البيانات (DB) وتعبئتها / تقوم بتغليف الجداول بأدنى مجموعة من البيانات (مثل: أدوار المستخدم). بناءً على وحدات تحكم نحتاج إلى ملء قاعدة بيانات (DB) والتحقق مما إذا كانت وحدة التحكم تقوم بهذه المهمة أم لا. تم تصميم هذا بطريقة أن DB البيانات الفاسدة التي خلفتها أساليب أخرى لن تفشل أبداً في الاختبار. ما عدا الوقت الذي يستغرقه تشغيل ، إلى حد كبير كل صفات اختبار وحدة (eventhough أنها نظرية) هي gettable.

لم يكن هناك سوى 2 ٪ من الحالات (أو نادرا جدا) في مسيرتي عندما اضطررت لاستخدام mocks / stubs لأنه لم يكن من الممكن إنشاء مصدر بيانات أكثر واقعية. ولكن في جميع الحالات الأخرى كانت اختبارات الدمج ممكنة.

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

===================================

تم تحريره بعد تعليق أدناه: عرض توضيحي

اختبار التكامل أو اختبار functinal لديه للتعامل مع DB مباشرة. لا تهوي هذه هي الخطوات. تريد اختبار getEmployee () . كل هذه الخطوات الخمس التالية تتم في طريقة اختبار واحدة.

  1. إسقاط ديسيبل
  2. قم بإنشاء DB و ملء الأدوار وغيرها من البيانات الأولية
  3. إنشاء سجل موظف مع معرف
  4. استخدام هذا المعرف واستدعاء getEmployee ()
  5. الآن تأكيد () / تحقق من صحة البيانات التي تم إرجاعها

    هذا يثبت أن getEmployee () يعمل. تتطلب الخطوات حتى 3 أن يكون لديك رمز يستخدم فقط من خلال مشروع اختبار. الخطوة الرابعة تستدعي رمز التطبيق. ما أعنيه هو إنشاء موظف (الخطوة 2) ينبغي أن يتم عن طريق اختبار رمز المشروع لا رمز التطبيق. إذا كان هناك رمز تطبيق لإنشاء موظف (على سبيل المثال: CreateEmployee () ) ، فيجب عدم استخدام هذا الرمز. بنفس الطريقة عندما نقوم باختبار CreateEmployee () ثم لا يجب استخدام رمز التطبيق GetEmployee () . يجب أن يكون لدينا رمز مشروع اختبار لجلب البيانات من جدول.

بهذه الطريقة لا توجد احتفالات! سبب إسقاط وإنشاء DB هو منع DB من الحصول على بيانات خاطئة. مع اقترابنا سوف يمر الاختبار بغض النظر عن عدد المرات التي نديرها.

تلميح خاص: في الخطوة 5 إذا أرجعت getEmployee () كائن موظف. إذا قام المطور اللاحق بإزالة أو تغيير اسم الحقل الذي يتم فواصل الاختبار بسبب التحقق من الحقول. ماذا لو أضاف مطوّر برامج حقلاً جديدًا لاحقًا؟ وننسى أن يضيف اختبار له (تأكيد)؟ الحل هو دائما إضافة فحص عدد الحقول. على سبيل المثال: يحتوي كائن الموظف على 4 حقول (الاسم الأول ، اسم العائلة ، التخصيص ، الجنس). لذا تأكيد عدد من حقول كائن الموظف هو 4. وسيفشل اختبارنا بسبب العد ويذكر المطور لإضافة حقل تأكيد للحقل الذي تمت إضافته حديثًا. وأيضًا رمز الاختبار الخاص بنا سيضيف هذا الحقل الجديد إلى DB ويقوم باسترداده والتحقق منه.

وهذه مقالة رائعة تناقش فوائد اختبار التكامل على اختبار الوحدة لأن "اختبار الوحدة يقتل!" (انها تقول)




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

وبعبارة أخرى ، عند اختبار وحدة التحكم ، فأنت تكتب طريقة الاختبار بالطريقة ولا يجب أن يكون لديك حتى طريقة العرض أو النموذج الذي تم تحميله ، تلك هي الأجزاء التي يجب عليك "الاستهزاء بها". يمكنك بعد ذلك تغيير المهاجع لإرجاع القيم أو الأخطاء التي يصعب إعادة إنتاجها في اختبارات أخرى.




Links