سؤال

أقوم حاليًا بإنشاء مجموعة اختبار وحدة مقترنة لكل تجميع في مشروعي، وكلاهما موجود في نفس المجلد.

  • MyProject/MyProject.csproj
  • MyProject.Test/MyProject.Test.csproj

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

لدي حاليًا منطق msbuild لإجراء الاختبارات على جميع ملفات *.Test.csproj.إذا كانت لدي جميع اختباراتي في مجلد مختلف فلن أحتاج إلى القيام بذلك.

فقط أتساءل عما إذا كانت هناك أي حجج جيدة للقيام بالأشياء بطريقة معينة.

شكرًا

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

المحلول

أفعل ذلك بنفس الطريقة لكن أقوم بتغيير مساحة الاسم الافتراضية لكل مشروع اختباري لتتناسب مع مساحة الاسم الخاصة بمشروع الإنتاج.لذلك اختبارات الطبقة X.Y.Foo يكون في X.Y.FooTest بدلا من X.Y.Test.FooTest - يعني أنك تحتاج إلى استخدام توجيهات أقل، ويجعل الأمور أكثر بساطة بشكل عام.

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

أخيرًا، لا تنس أنه إذا كنت بحاجة إلى الوصول internal أعضاء عند الاختبار، هناك دائما [InternalsVisibleTo].

نصائح أخرى

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

إليك هيكل الدليل الذي أستخدمه:

اسم المشروع / الفروع / الجذع / المشاريع / رمز / CodeProject1
اسم المشروع / الفروع / الجذع / المشاريع / رمز / CodeProject2
اسم المشروع / الفروع / الجذع / المشاريع / رمز / CodeProject3
اسم المشروع / الفروع / صندوق / مشاريع / اختبارات / اختبار Preproject1
اسم المشروع / الفروع / جذع / التبعيات اسم المشروع / النماذج الأولية
اسم المشروع/...

وداخل TestProject1، وهيكل الدليل التالي:

CodeProject1 /
CodeProject2 /
CodeProject2 / Web.
CodeProject2 / Web / MVC
CodeProject3 /
CodeProject3 / الدعم

أقوم بنفس الشيء باستثناء كل مشروع موجود في مجلده الخاص بموجب نفس مجلد الجذر. شيء ما يلي:

مجلد الحل

  • مجلد projecta.
  • مجلد projecta.test
  • مجلد العرض
  • مجلد projectb.test

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

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