كيف تقوم باختبار فئة من المفترض التحدث إلى البيانات؟
-
02-10-2019 - |
سؤال
لدي بعض فئات المستودعات التي تهدف إلى التحدث إلى أنواع مختلفة من البيانات ، مستمدة من IRepository
واجهه المستخدم.
في التطبيقات ، يتحدث الرمز إلى مصدر بيانات ، يكون هذا دليلًا لملفات XML أو قاعدة بيانات أو حتى مجرد ذاكرة التخزين المؤقت. هل من الممكن اختبار الوحدة بشكل موثوق أي من هذه التطبيقات؟ لا أرى تطبيقًا وهميًا يعمل ، لأنني بعد ذلك أقوم فقط باختبار الرمز الوهمي وليس الرمز الفعلي.
المحلول
لا ، كنت تستخدم وهمية عندما كنت تكتب فصلًا الاستخدامات و IRepository
. ل التطبيقات من IRepository
, ، ستحتاج إلى الاختبار مقابل مصدر البيانات المناسب. بالنسبة لقواعد البيانات ، فهذا جزء من الألم - لنظام الملفات ، أقل قليلاً من ذلك.
حيثما أمكن ، إذا كان بإمكانك التعبير عن تطبيقك من حيث التدفقات أو القراء ، فستجعل حياتك أسهل: يمكن أن تتعارض اختبارات تلك الأجزاء من التنفيذ في مصادر البيانات في الذاكرة ، أو تدفقات من الموارد في مجموعة الاختبار. بالطبع ربما ستحتاج بعض الاختبارات التي تنتقل إلى قاعدة بيانات حقيقية أو نظام الملفات ، ولكن نأمل أن تكون أقل.
سواء كنت تطلق على اختبارات "الوحدة" هذه الاختبارات أم لا ، فهي مسألة كيفية تحديد اختبارات الوحدة ؛ أنا شخصياً لا أهتم كثيرًا بالأسماء المعنية ، لكنني فعل تهتم باختبارات. بالنسبة لقواعد البيانات على وجه الخصوص ، يمكن أن تكون هذه مؤلمة إلى حد ما (خاصة إذا كنت تريد أن تكون قادرًا على إجراء اختبارات بالتوازي) - ولكن يمكن أن تكون أيضًا ذات قيمة لا تصدق ، في تجربتي.
نصائح أخرى
أعتقد أنه إذا كنت تختبر رمزًا مستمرًا بالفعل أو استفسارات البيانات ، فربما تريد بالفعل ضرب قاعدة بيانات.
هذه اختبارات التكامل بدلاً من اختبارات الوحدة.
يمكنك إعداد قاعدة بيانات اختبار ، حيث تعرف حالة البيانات ، وتشغيل الاختبارات ضد هذا. ربما تريد أيضًا أن تخبر الاختبارات بأنها مختلفة عن اختبارات وحدتك ولا تحتاج إلى تشغيلها في كل شيك في (في Nunit ، يمكنك تزيين فئة الاختبار الخاصة بك بسمات تخبرها بعدم التشغيل)
بشكل واسع ، لن تفعل وحدة اختبر أي رمز هدفه الوحيد هو التحدث إلى مصدر بيانات. قد لا تزال ترغب في اختبار المستودع تلقائيًا ، ولكن هذا الاختبار سيكون اختبار تكامل بحكم التعريف. ربما لا ترغب في إجراء هذه الاختبارات كجزء من "Pass First Pass" الخاص بك ، حيث أن إعداد قاعدة البيانات والتنظيف بعد نفسك يمكن أن تأخذ وقتًا غير مهم.
إذا كان المستودع الخاص بك يتحمل مسؤوليات أخرى (على سبيل المثال تنفيذ نمط وحدة العمل) ، فقد ترغب في اختبار وحدة تلك بشكل منفصل.
في مرحلة ما من تنفيذ iRepository ، ستستخدم واجهة برمجة تطبيقات طرف ثالث من شأنها أن تقرأ/تكتب بالفعل إلى/من قاعدة البيانات/الملف/XML. ما تريد القيام به هو السخرية من واجهات برمجة التطبيقات هذه للتأكد من استدعاء الكود الخاص بك واجهة برمجة التطبيقات المناسبة بالترتيب الصحيح.
لذلك إذا كنت تقرأ من قاعدة البيانات ، فيمكنك السخرية من SQLConnection و SQLCommand وتأكد من استدعاء الطرق الصحيحة على هذه الفئات. إذا كنت تكتب إلى دفق ، فيمكنك السخرية من الدفق والتأكد من غسله والتخلص منه (على سبيل المثال).