سؤال

أين تضع اختبارات الوحدات للوظائف الخاصة في فصول C #؟

أ مقالة في ويكيبيديا وتقترح:

  • وضع الاختبارات في نفس الفئة مثل الأعضاء الذين يختبرونها
  • باستخدام الفصول الجزئية

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

اي افكار في هذا؟

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

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

المحلول

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

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

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

لا تجميع فئات الاختبار الخاصة بك مع بقية مشروعك عند الافراج عن الإنتاج (أو في حالة وجود لغة تفسير مثل PHP، لا تنشر فئات الاختبار إلى WebServer الإنتاج).

نصائح أخرى

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

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

أين تضع اختبارات الوحدات للوظائف الخاصة في فصول C #؟

في أي مكان. أنها غير موجودة.

بشكل عام، اختبارات وحدتي في مشاريع منفصلة.

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

[assembly: InternalsVisibleTo("MyAssembly.UnitTests")]

يجب أن تفعل ما يعمل من أجلك؛ إليك ما يعمل بالنسبة لي:

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

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

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

جعل الانتقال إلى طريقة العمل هذه مطلوبة لي إعادة التفكير العديد من افتراضاتي وعاداتي حول البرمجة. ما بدا مرة جذرية الآن تبدو شائعة.

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

التي يقال، هناك أسباب لماذا قد ترغب في اختبار طرق خاصة:

  1. أنت تستخدم TDD، وعليك تطوير طريقة خاصة معقدة. قد يكون إنشاء طرق اختبار للطريقة الخاصة ضروريا للحفاظ على رمز اختبار الكتابة الخاص بك - دورة اختبار في الحبيبات الصحيحة.

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

بعض الحلول:

  1. أعلن بعض الأساليب العامة التي تفوضها إلى الطريقة الخاصة وتستخدم إلا لأغراض الاختبار. يمكن بادئة هذه على سبيل المثال مع TestFoo1، TestFoo2 إلخ.

  2. استخدام الداخلية

http://msdn.microsoft.com/en-us/library/7c5ka91b(vs.80).aspx.

عنوان سؤالك الجملة الأولى مختلفة. :)

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

نستخدم مواقف خاصة في Visual Studio لاختبار الأساليب الخاصة. هذا يعني أن فئات الاختبار يمكن أن تعيش في مشروع منفصل.

ومع ذلك، نحاول حقا الحد من أرقام هذه لأن:

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

بكل تأكيد نعم. يجب اختبار الطرق الخاصة على أي حال. و mbunit. وحدة اختبار الوحدة يمكن الوصول إلى العضو الخاص.

انظر هذا بلوق:اختبار طرق خاصة

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