الاختبار في مسار C++

تعرّف على كيفية اختبار تمارين C++ الخاصة بك على Exercism.


يوفّر كل تمرين اختبارات الوحدة ووصفة بناء جاهزة لـ CMake، بينما تتكفّل أنت بالتنفيذ. الغرض من كل ملف اختبار أن يُربَط بتنفيذك لينتج برنامجًا تنفيذيًا يشغّل الاختبارات. وعند تشغيل البرنامج التنفيذي للاختبارات تُطبَع رسائل لكل اختبار فاشل، ويُبلَّغ بحالة خروج غير صفرية عند فشل الاختبارات.

ملاحظة: يجري اختبار الكود الذي تكتبه مقابل مجموعة الاختبارات في كل مرة تبني فيها مشروعك. وإذا لم يجتز الكود اختبارًا واحدًا أو أكثر لكنه كود C++ صالح، فسيُجمَّع على أي حال.

العمل على كل تمرين عملية تتكون من:

  • إنشاء البناء الأولي باستخدام CMake
  • لكل اختبار وحدة:
    • عالِج أخطاء التجميع لكي يفشل الاختبار.
    • نفّذ القدر الكافي فقط ليجتاز الاختبار.
    • أعد هيكلة تنفيذك لتحسين قابلية القراءة وتقليل التكرار وما إلى ذلك.
    • أزل التعليق عن الاختبار التالي

إنشاء البناء الأولي باستخدام CMake

يأتي كل تمرين مع ملف CMakeLists.txt إلى جانب اختبارات الوحدة. ويحتوي هذا الملف على وصفة CMake الجاهزة التي تتولّى البناء عنك، ولا يُفترض أن تحتاج إلى تحرير هذا الملف. تفترض الوصفة المرفقة أن تنفيذك موجود في ملف ترويسة وملف مصدر يحملان اسم التمرين.

على سبيل المثال، يتوقّع التمرين bob تنفيذًا في bob.h وbob.cpp. أما التمارين التي تحتوي أسماؤها على شرطات، فيُفترض أن تستخدم ملفات المصدر شرطات سفلية، لذا يتوقّع word-count وجود word_count.h وword_count.cpp. وقد ترى أن تنفيذك بسيط بما يكفي ليكون بالكامل داخل ملف الترويسة، وفي هذه الحالة يمكنك الاستغناء عن ملف cpp.

أنشئ ملفات التنفيذ الأولية قبل تشغيل CMake. إذا لم تكن لديك الملفات bob.h وbob.cpp عند تشغيل CMake للتمرين bob، فسيولّد CMake خطأً مفاده أن الملفات غير موجودة. يمكن أن تكون هذه الملفات فارغة، لكن يجب أن تكون موجودة.

باستخدام هذه الوصفة، يستطيع CMake توليد مشروع مناسب لبيئتك عبر تشغيل cmake -G مع مُولِّد مناسب وموقع مجلد التمرين. وسيولّد CMake سكربت بناء مناسبًا لنظام تشغيلك. ولإبقاء تلك الملفات المولّدة منفصلة عن الكود المصدري لتمرينك، من الشائع إنشاء مجلد باسم build يحتوي على ملفات البناء المولّدة وكذلك الكود المُجمَّع. سيساعدك هذا على إبقاء مجلد التمرين مرتبًا وخاليًا من الفوضى.

بعد أن ينشئ CMake بيئة البناء، يمكنك بناء الكود باستخدام الأمر المناسب لبيئتك:

  • Linux مع make: make
  • Windows مع Visual Studio: اختر Build / Build Solution من القائمة.
  • MacOS مع Xcode: اختر Build من شريط الأدوات
  • MacOS مع "Unix Makefile": make إذا كنت تستخدم تطبيق واجهة سطر الأوامر الخاصة بـ Exercism

فيما يلي أمثلة على تشغيل CMake في بيئات مختلفة.

Linux مع Make

اسم المُولِّد في CMake هو Unix Makefiles. بافتراض أن التمرين الحالي هو bob وأننا داخل مجلد التمرين:

$ touch bob.{h,cpp}
$ mkdir build
$ cd build
$ cmake -G "Unix Makefiles" ..
$ make

يوضح هذا المثال إنشاء ملفات فارغة للتنفيذ قبل تشغيل CMake.

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

Windows مع Visual Studio

يدعم Visual Studio مشاريع CMake دعمًا أصليًا، لذا لن تحتاج إلى تثبيت CMake بشكل منفصل أو تشغيله خارج Visual Studio. اتبع هذا الدليل لإعداد مشروع CMake في Visual Studio.

MacOS مع Xcode

اسم المُولِّد في CMake هو Xcode. بافتراض أن التمرين الحالي هو bob وأننا داخل مجلد التمرين:

$ touch bob.{h,cpp}
$ mkdir build
$ cd build
$ cmake -G Xcode ..

يولّد هذا المثال ملفات XCode بحيث يمكنك فتح المشروع في XCode. وبعد فتح المشروع في XCode قد تحتاج إلى إضافة هدف آخر. لإضافة هدف جديد، انتقل من القائمة إلى File -> New -> Target، ثم OS X \ Application \ Command Line Tool -> Next، واختر C++ لغةً، وحدّد اسمًا للهدف. ثم شغّل الكود باستخدام الهدف.

إذا أظهرت الطرفية خطأً مثل Xcode x.x not supported، فمن المرجح جدًا أن Xcode غير مثبَّت على جهازك أو أن نسختك قديمة. يُرجى تنزيل Xcode وتثبيته عبر App Store أو عبر هذا الرابط. أما الأخطاء المشابهة لـ The CXX compiler identification is unknown فسيُحلّ معظمها على الأرجح باتباع تعليمات تثبيت GCC أو بإضافة هدف آخر في Xcode على النحو الوارد في الفقرة السابقة.

MacOS مع Make عند استخدام واجهة سطر الأوامر الخاصة بـ Exercism

هذا المثال موجَّه تحديدًا إلى من يرغبون في استخدام تطبيق واجهة سطر الأوامر الخاصة بـ Exercism لإعداد تمارين C++ الخاصة بهم واختبارها وإرسالها.

اسم المُولِّد في CMake هو Unix Makefiles. بافتراض أن التمرين الحالي هو bob وأننا داخل مجلد التمرين:

$ touch bob.{h,cpp}
$ cmake -G "Unix Makefiles" .
$ exercism test

في هذا المثال، ننشئ بالفعل ملفات فارغة للتنفيذ قبل تشغيل CMake، لكننا لا ننشئ مجلد بناء فارغًا. والسبب أن واجهة سطر الأوامر الخاصة بـ Exercism تستخدم الملف .exercism/metadata.json في المجلد الجذر لتحليل حالات الاختبار.

ما عليك سوى كتابة exercism test في المجلد الجذر لتجميع الاختبارات. من المفترض أن يؤدي هذا إلى أخطاء في وقت التجميع. وبعد إصلاح الأخطاء، سيؤدي تشغيل exercism test مرة أخرى إلى بناء الاختبارات وتنفيذها باستخدام واجهة سطر الأوامر الخاصة بـ Exercism.