[C#] كيف ينبغي لوحدة واحدة اختبار وحدة تحكم .NET مفك؟


Answers

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

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

Question

أبحث عن المشورة بشأن اختبار وحدة فعالة من وحدات تحكم .NET مفك.

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

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

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

شكر!




عادة عندما تتحدث عن اختبارات الوحدات، فإنك تختبر إجراءا أو طريقة فردية، وليس نظاما كاملا، بينما تحاول إزالة جميع التبعيات الخارجية.

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




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

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

var response = new TestSession().Get("/Users/List");
Assert.IsInstanceOf<UserListModel>(response.Model);

var model = (UserListModel) response.Model;
Assert.AreEqual(1, model.Users.Count);

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