سؤال

لدي واجهة برمجة تطبيقات فئة تحتوي على تغطية رمز كاملة وتستخدم DI لسخر كل المنطق في وظيفة الفصل الرئيسية (Job.run) التي تقوم بكل العمل.

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

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

عظيم ، الآن نحن نعرف أعمال التحقق. المشكلة هي - كيف يمكنني كتابة الاختبار للتأكد من أن ValidateFoo () يسمى فعليًا Inside Job.run ()؟ ValidateFoo () هي طريقة خاصة لفئة الوظائف - لذلك فهي ليست واجهة ...

هل هناك على أي حال للقيام بذلك مع NMock2.0؟ أعلم أن Typemock يدعم مزيفًا من أنواع غير الواجهة. لكن تغيير libs وهمية الآن ليس خيارًا. في هذه المرحلة ، إذا لم تتمكن Nmock من دعمه ، فسأضيف ببساطة استدعاء ValidateFoo () إلى طريقة Run () واختبار الأشياء يدويًا - والتي من الواضح أنني أفضل عدم التفكير في وظيفتي. تغطية 100 ٪ الآن. اي نصيحه؟ شكرا جزيلا إنه موضع تقدير.

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

EDIT2: هل هناك أي طريقة للقيام بـ TIHS؟ أي شخص لديه أفكار؟ ربما typemock - أو تصميم أفضل؟

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

المحلول

الإصدار الحالي من NMock2 هل يمكن أن تسخر من أنواع الخرسانة (لا أتذكر بالضبط الإصدار الذي أضفوه هذا ، لكننا نستخدم الإصدار 2.1) باستخدام بناء الجملة المألوف في الغالب:

Job job = mockery.NewMock<Job>(MockStyle.Transparent);
Stub.On(job).Method("ValidateFoo").Will(Return.Value(true));

يحدد MockStyle.transparent أنه يجب التعامل مع أي شيء لا تتوقعه أو تتوقعه من خلال التنفيذ الأساسي - حتى تتمكن من وضع التوقعات للطرق التي تختبرها على سبيل المثال.

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

  • يجعلون Job.ValidateFoo() الجمهور والظاهري.
  • استخراج منطق التحقق من الصحة في فئة جديدة وحقن مثيل في Job.

نصائح أخرى

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

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

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