كيف تقوم باختبار فئة من المفترض التحدث إلى البيانات؟

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

سؤال

لدي بعض فئات المستودعات التي تهدف إلى التحدث إلى أنواع مختلفة من البيانات ، مستمدة من IRepository واجهه المستخدم.

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

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

المحلول

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

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

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

نصائح أخرى

أعتقد أنه إذا كنت تختبر رمزًا مستمرًا بالفعل أو استفسارات البيانات ، فربما تريد بالفعل ضرب قاعدة بيانات.

هذه اختبارات التكامل بدلاً من اختبارات الوحدة.

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

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

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

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

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

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