كيف يمكنني كتابة اختبار وحدة لفئة وحدة تحكم تستخدم winforms لطرق العرض؟

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

سؤال

هل تمكن أي شخص من النجاح في وحدة طرق الاختبار المقترنة بالضرورة بفئة System.Windows.Forms.Form؟

لقد كنت أعمل مؤخرًا على تطبيق C# winforms، محاولًا بنائه باستخدام بنية MVC.وهذا أمر صعب بما فيه الكفاية، نظرًا لأن إطار العمل لم يتم تصميمه حقًا مع وضع ذلك في الاعتبار.

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

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

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

هل هناك أي شخص نجح في اختبار هذا النوع من التعليمات البرمجية؟كيف فعلتها؟

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

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

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

المحلول

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

نصائح أخرى

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

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

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