هل يمكن تمديد مجموعة CXXTEST ديناميكيًا في وقت التشغيل؟

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

سؤال

أود أن أقدم ديناميكي جناح CXXTEST مع عناصر اختبار إضافية ، لكنني أجد أن جميع مشهد الاختبار يجب أن تكون متوفرة (مرمزة) في وقت الترجمة.

السيناريو الخاص بي هو أن لدي فئة C ++ ضخمة إلى حد ما والتي يتم اختبارها أكثر من 20 طريقة. يجب اختبار هذه الفئة لـ 40+ مجموعة بيانات مختلفة. يتم الحصول على مجموعات البيانات هذه عبر مُنشئ الفئة ، يتم التحكم فيها عبر المعلمات.

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

Q1) كيف يمكن للمرء ديناميكيًا (في وقت التشغيل) إضافة المزيد من الاختبارات إلى مجموعة الاختبار؟

Q2) هل يمكن للمرء إضافة تركيبات في وقت التشغيل؟ هل هناك جناح اختبار أفضل يسمح بتركيبات ديناميكية؟

س 3) هل هذا شيء يتجنبه تقنية TDD؟ حصل أي شخص على ملخص جيد لتقنية TDD.

شكرًا،

-J Jorgenson-

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

المحلول

ليس هناك أي طريقة مباشرة للقيام بذلك. يتم تحديد عدد الاختبارات قبل وقت الترجمة ، عند التشغيل cxxtestgen. يوسع ملفاتك ويجد أسماء الأسلوب تبدأ بـ test. كما يجد TestSuite أحفاد ويولد رمز لإنشاء إنشاء كل واحد مرة واحدة. تستطيع اكتب createSuite وظيفة في كل من أجنحة الاختبار الخاصة بك لتمرير المعلمات إلى مُنشئ الجناح ، لكنك لا تزال تقتصر على إرجاع كائن واحد فقط.

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

std::string global_var; // check this in your test cases
int main(int argc, char* argv[]) { // add parameter list
  global_var = argv[1]; // read parameter list
  return CxxTest::ErrorPrinter().run(); // standard CxxTest
}

لاستخدام هذه الوظيفة ، حذف --error-printer الخيار عند الركض cxxtestgen, ، يضيف <CxxTest world> في نهاية الملف ، والاستخدام ال --template خيار إنشاء برنامج الاختبار الخاص بك.

ولكن طالما أنك تكتب خاصتك main, ، قد تحاول تحليل ملف مجموعة البيانات هناك أيضًا ، ثم استدعاء عداء الاختبار عدة مرات. شيء من هذا القبيل:

int main() {
  std::fstream dataset("datasetlist.txt");
  int result = 0;
  while (std::getline(dataset, global_var))
    result += CxxTest::ErrorPrinter().run();
  return result;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top