سؤال

وقد استخدم أي شخص هدسون كخادم التكامل المستمر لمشروع C++ باستخدام UnitTest++ كمكتبة اختبار؟

كيف بالضبط قمت بإعداده؟

أعلم أنه كانت هناك عدة أسئلة حول التكامل المستمر من قبل، ولكن آمل أن يكون لهذا السؤال نطاق أضيق.

يحرر:سأوضح قليلاً ما أبحث عنه.لقد قمت بالفعل بتعيين مجموعة البناء على الفشل عندما تفشل اختبارات الوحدة.أنا أبحث عن شيء مثل دعم Hudson's JUnit.يمكن لـ UnitTest++ إنشاء تقارير XML (انظر هنا).لذا، ربما إذا كان شخص ما يعرف كيفية ترجمة هذه التقارير لتكون متوافقة مع JUnit، فسيعرف هدسون كيفية تناولها؟

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

المحلول

نحن نفعل هذا بنشاط في مكان عملي.

حاليًا، نستخدم مشروعًا برمجيًا حرًا من أجل:

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

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

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

نصائح أخرى

وراجعت xUnit المساعد، كما اقترح باتريك Johnmeyer في الجواب المقبولة. لأجلكم اكتمال، وهنا هو رمز السائق:

#include <fstream>
#include "UnitTest++.h"
#include "XmlTestReporter.h"

int main( int argc, char *argc[] ) {
    std::ofstream f("file.xml");
    UnitTest::XmlTestReporter reporter(f);
    return UnitTest::RunAllTests(reporter, UnitTest::Test::GetTestList(), NULL, 0);
}

في التكوين هدسون، تحقق "نشر أدوات الاختبار نتيجة تقرير" وأشر إلى "file.xml"

وهدسون لديها الآن CppUnit المساعد التي قد تفعل خدعة .

وقبل وقت طويل بدأت في استخدام هدسون، عملت على C ++ المشروع حيث كنا حزب الشعب الكمبودي وحدة لايت وCruiseControl

ونحن تغيير CPP وحدة لايت لتوليد أداة JUnit مثل ملفات XML تقرير واختار CruiseControl الاحتياطي للملفات XML التقرير.

ويمكنك أن تفعل الشيء نفسه بالنسبة UnitTest ++ وهدسون سوف التقاط ملفات التقرير.

ومع ذلك، يبدو أن الكثير من العمل. إلقاء نظرة على البرنامج المساعد مؤامرة لهدسون. هل يمكن أن يكون السيناريو استخراج عدد من الفشل / اجتياز اختبارات من انتاج UnitTest ++ واستخدام مؤامرة المساعد رسم بياني بسيط من مرور / فشل التجارب في البناء.

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

يمكنني استخدام هدسون مع إخراج CppUnit وXML.تتم ترجمة ملف XML بواسطة xslt إلى إخراج JUnit مثل.يوفر موقع CppUnit ملف xslt يقوم بتحويل إخراج CppUnit إلى إخراج JUnit.لقد قمت باختراقه قليلاً للحصول على تفاصيل أكثر مثل:

  • مساحات الأسماء كحزم
  • وقت التنفيذ

يمكنك تحويل مخرجات XML للحصول على ما يلي:

<?xml version="1.0" encoding="UTF-8"?>
<testsuite>
   <testcase name="my test name"
             classname="Package1.Package2.TestClass"
             time="0.25">
      <error type="error"/>
   </testcase>
   ....
</testsuite>

في حالة النجاح :فقط قم بإزالة العلامة الفرعية

يعتبر

لقد تم استخدام نهج مماثل في مكتبي، إلا باستخدام cxxtest بدلا من UnitTest ++، ونحن الآن في عملية الهجرة إلى متفوقة (إيمهو) gtest إطار غوغل.

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

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

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