كيف يمكنك تنفيذ اختبار الوحدة في مشاريع C++ واسعة النطاق؟[مغلق]

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

  •  01-07-2019
  •  | 
  •  

سؤال

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

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

المحلول

هناك العديد من وحدات إطارات وحدة الاختبار لـ C++.من المؤكد أن CppUnit ليس هو الخيار الذي سأختاره (على الأقل في نسخته الثابتة 1.x، لأنه يفتقر إلى العديد من الاختبارات، ويتطلب الكثير من سطور الأكواد المتكررة).حتى الآن، الإطار المفضل لدي هو com.CxxTest, ، وأخطط للتقييم الفركتوز في يوم ما.

على أية حال، هناك عدد قليل من "الأوراق" التي تقيم أطر عمل C++ TU:

نصائح أخرى

هذا نهج معقول.

لقد حصلت على نتائج جيدة جدًا مع كل من UnitTest++ و اختبار

لقد ألقيت نظرة على CppUnit، لكن بالنسبة لي، بدا الأمر وكأنه ترجمة لعناصر JUnit أكثر من كونه شيئًا يستهدف لغة C++.

تحديث: في هذه الأيام أفضّل استخدام يمسك.لقد وجدت أنها فعالة وسهلة الاستخدام.

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

منذ عامين (2008) شاركت في مشروع كبير للبنية التحتية LSB تم نشره بواسطة مؤسسة Linux.كان أحد أهداف هذا المشروع هو كتابة اختبارات الوحدة لـ 40.000 وظيفة من مكتبات Linux الأساسية.في سياق هذا المشروع قمنا بإنشاء تقنية أزوف والأداة الأساسية المسماة اختبار API Sanity التلقائي من أجل إنشاء جميع الاختبارات تلقائيًا.يمكنك محاولة استخدام هذه الأداة لإنشاء اختبارات الوحدة لمكتبتك (مكتباتك) الأساسية.

أستخدم UnitTest++.الاختبارات موجودة في مشروع منفصل ولكن الاختبارات الفعلية متشابكة مع الكود الفعلي.وهي موجودة في مجلد ضمن القسم قيد الاختبار.أي:
MyProject\src\ <- مصدر التطبيق الفعلي
MyProject\src ests <- مصدر الاختبارات
إذا كان لديك مجلدات متداخلة (ومن لا يملكها)، فسيكون لها أيضًا الدليل الفرعي ests الخاص بها.

Cppunit هو المعادل المباشر لـ Junit لتطبيقات C++http://cppunit.sourceforge.net/cppunit-wiki

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

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

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

يمكن بسهولة كتابة البرامج النصية لتشغيل كافة مجموعات الاختبار في شجرة المصدر الخاصة بك وجمع النتائج.

لقد كنت أستخدم نسخة مخصصة من CppUnit الأصلية لسنوات وحققت نجاحًا كبيرًا، ولكن هناك بدائل أخرى الآن. اختبار جوجل يبدوا مثيرا للأهتمام.

أعتقد أنك على الطريق الصحيح من خلال اختبار الوحدة وهي خطة رائعة لتحسين موثوقية منتجك.

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

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

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

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

باستخدام توت http://tut-framework.sourceforge.net/بسيط جدًا، فقط ملف رأسي بدون وحدات ماكرو.يمكن أن تولد نتائج XML

com.CxxTest يستحق أيضًا البحث عن إطار عمل JUnit/CppUnit/xUnit الشبيه بالمنصة المشتركة خفيف الوزن وسهل الاستخدام لـ C++.نجد أنه من السهل جدًا إضافة الاختبارات وتطويرها

آرين هو إطار اختبار C++ آخر يستحق النظر إليه

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