سؤال

في كتاب Roy Osherove [اختبار الوحدة] [1] ، يوضح أن اختبار وحدة واحد يجب أن يحتوي على ما بين 0 و 1. يقترح أنه إذا لم يكن الاختبار الخاص بك يؤكد على وهمية ، فلا تستخدم وهمية على الإطلاق. كما يوضح كيفية استخدام إطار عزل لإنتاج كعبان ، والتي تم إنشاؤها بشكل مشابه للنهايات. لا يضع أي حد مقترح على عدد كعبان البغرة التي تم إنشاؤها لكل اختبار.

سؤالي هو: هل يمكن تطبيق تلك التوصيات على جميع أطر العزل (أو جميع أطر C# الشعبية)؟ بمعنى آخر ، هل هناك إطار عمل يمكن أن يولد فقط من السخرية - وليس كوب؟ هل هناك إطار عزل لا يميز السخرية عن كعبان؟

أنا فقط أشعر بالفضول مدى سهولة تحويل توصيات Osherove إلى معايير الترميز.

[1]: http: // لا يتم اختبار النظام قيد الاختبار على الإطلاق ، وبدلاً من ذلك ، فإن البيانات التي يتم إرجاعها من Mocks هي ما يتم اختباره.

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

المحلول

هناك أطر مثل MOQ التي لا تميزها. Goaketeasy يذهب إلى أبعد من ذلك ويطلق على كل شيء أشياء مزيفة.

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

نصائح أخرى

هذا يتوافق مباشرة مع توصية Osherove بأن تقوم بتأكيد واحد فقط لكل اختبار. في معجمه أ stub هو فئة توفر مدخلات مزيفة للنظام قيد الاختبار ، بينما أ mock هو فئة تتيح لك اختبار الإخراج من النظام قيد الاختبار (باستخدام فئة مزيفة).

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

بالطبع ، لا يتفق الجميع على توصيته ، لذلك لا يفعل الجميع ذلك بهذه الطريقة.

كتب فيليب كالسادو مؤخرًا عن هذا: http://fragmental.tw/2010/12/14/one-mock-per-test-considered-not-awesome/. باختصار ، يقول إن التركيز على عدد النماذج/الرعب الموجودة في الاختبار يحول لك عن ما ينبغي أن يكون الشاغل الرئيسي: كتابة المواصفات الجيدة.

> can those recommendations 
> [a single unit test should contain between 0 and 1 mocks] 
> be applied to all isolation frameworks ?

أعتقد: معظم الوقت نعم إذا افترضت هذه التعريفات

  • unittest = اختبار في عزلة (آخر ليس غير محدد)
  • واحد غير مألوف لميزة واحدة
  • كعب أو مزيف هو كائن للسماح بالعزلة ولكن ليس له وظيفة التحقق و
  • وهمية هي كعب مع وظائف إضافية تسمح أيضا بالتحقق

أنا أستعمل Moqلسخرتي أحضره هنا

لست متأكدًا مما تعنيه بالضبط حول "القطع" ، لكنني أفترض أنه ربما يكون شيئًا مثل Moles from Microsoft وهو رائع جدا. هنا

كلاهما مثير للاهتمام حقا وسهلة الاستخدام للغاية.

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

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

أنا استخدم وحيد القرن وهمية لاختبار في C#. يمكنك إنشاء Mocks أو Stubs معها. أشجعك على إلقاء نظرة على هذا الإطار: http://www.ayende.com/projects/rhino-mocks.aspx

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