أفضل الممارسات لدمج TDD مع تطوير تطبيقات الويب؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

يعد اختبار الوحدة وتطبيقات الويب ASP.NET نقطة غامضة في مجموعتي.في أغلب الأحيان، تفشل ممارسات الاختبار الجيدة وينتهي الأمر بتطبيقات الويب لعدة سنوات دون أي اختبارات.

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

كيف تقوم أنت أو مؤسستك بدمج أفضل ممارسات TDD مع تطوير تطبيقات الويب؟

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

المحلول

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

لاختبار واجهة المستخدم الرسومية يحب بعض الناس السيلينيوم.ويشكو آخرون من صعوبة الإعداد.

نصائح أخرى

أقوم بطبقة التطبيق واختبار الوحدة على الأقل من المقدم/وحدة التحكم (أيهما تفضل، mvc/mvp) إلى طبقة البيانات.بهذه الطريقة أحصل على تغطية اختبارية جيدة لمعظم التعليمات البرمجية المكتوبة.

لقد نظرت إلى FitNesse وWatin وSelenium كخيارات لأتمتة اختبار واجهة المستخدم، لكنني لم أتمكن من استخدامها في أي مشروع حتى الآن، لذلك نلتزم بالاختبار البشري.كان FitNesse هو الشخص الذي كنت أميل إليه ولكن لم أتمكن من تقديم هذا بالإضافة إلى تقديم TDD (هل هذا يجعلني سيئًا؟لا اتمنى!).

هذا سؤال جيد، وسأشترك فيه أيضًا :)

ما زلت جديدًا نسبيًا في مجال تطوير الويب، وأنا أيضًا أتطلع إلى الكثير من الأكواد البرمجية التي لم يتم اختبارها إلى حد كبير.

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

هل هو مثالي؟ربما لا، ولكن على الأقل لا يزال الأمر آليًا بدرجة عالية ولا يزال الكود الأساسي (حيث يحدث معظم "السحر") يتمتع بتغطية جيدة جدًا.

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

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

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

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

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

إذا لم تكن تشعر بالرضا تجاه كتابة الاختبارات، فمن المحتمل أنك تقوم بذلك بطريقة خاطئة ;)

من الممارسات الشائعة نقل جميع التعليمات البرمجية الممكنة من الكود الخلفي إلى كائن يمكنك اختباره بشكل منفصل.عادةً ما يتبع هذا الرمز أنماط تصميم MVP أو MVC.إذا بحثت عن "Rhino Igloo" فمن المحتمل أن تجد الرابط إلى مستودع Subversion الخاص به.يستحق هذا الكود الدراسة، لأنه يوضح أحد أفضل تطبيقات MVP على نماذج الويب التي رأيتها.

سوف يقوم برنامج codebehind الخاص بك، عند اتباع هذا النمط، بأمرين:

  1. نقل كافة إجراءات المستخدم إلى مقدم العرض.
  2. تقديم البيانات المقدمة من مقدم العرض.

يجب أن يكون اختبار الوحدة للمقدم تافهاً.

تحديث:يمكن العثور على Rhino Igloo هنا: https://svn.sourceforge.net/svnroot/rhino-tools/trunk/rhino-igloo/

كانت هناك محاولات للحصول على UI Automation المجاني من Microsoft (المضمن في .NET Framework 3.0) للعمل مع تطبيقات الويب (ASP.NET).تصادف أن شركة ألمانية تدعى Artiso قد كتبت تدوينة تشرح كيفية تحقيق ذلك (وصلة).

ومع ذلك، فإن منشور مدونتهم يربط أيضًا MSDN Webcasts الذي يشرح إطار عمل UI Automation مع winforms وبعد أن ألقيت نظرة على هذا، لاحظت أنك بحاجة إلى AutomationId للحصول على مرجع لعناصر التحكم المعنية.ومع ذلك، في تطبيقات الويب، لا تحتوي عناصر التحكم على AutomationId.

سألت توماس شيسلر (Artiso) عن هذا الأمر وأوضح أن هذا كان عيبًا كبيرًا في InternetExplorer.وأشار إلى تقنية أقدم من Microsoft (MSAA) وكان يأمل في أن يقوم IE8 بذلك بشكل أفضل.

ومع ذلك، فقد قمت أيضًا بتجربة Watin ويبدو أنه يعمل بشكل جيد.حتى أنني أحببت برنامج Wax، الذي يسمح بتنفيذ حالات اختبار بسيطة عبر أوراق عمل Microsoft Excel.

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

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