اختبار C++ للمبتدئين: من أين تبدأ وكيف لا تصاب بالجنون

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: لماذا يحتاج كود C++ الخاص بك إلى حماية؟

\n\n

تخيل أنك كتبت برنامجًا بلغة C++. إنه يُترجم دون أخطاء، ويُشغل، بل ويُنتج بعض النتائج. تزفر بارتياح وترسل الكود إلى الإنتاج. وبعد يوم، يكتب لك زميل: "يا صديقي، دالتك calculateSum تتعطل إذا مررت رقمًا سالبًا". وتبدأ في البحث المحموم عن الخلل، معيدًا قراءة مئات الأسطر من الكود.

\n\n

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

\n\n

ما هو اختبار الوحدات (Unit Testing) ولماذا هو ضروري؟

\n\n

اختبار الوحدات (أو الاختبارات النمطية) هو فحص "اللبنات" الفردية من الكود الخاص بك: الدوال، الفئات، والطرق. تكتب برنامجًا صغيرًا يستدعي دالتك ببيانات محددة ويتحقق من أن النتيجة تطابق المتوقع.

\n\n

لماذا يحتاج المبتدئ إلى هذا؟

\n
    \n
  • الطمأنينة: تعرف يقينًا أن كودك يعمل.
  • \n
  • السرعة: لا تخشى إجراء التعديلات، لأن الاختبارات ستخبرك فورًا إذا حدث خطأ.
  • \n
  • التوثيق: الاختبارات هي مثال حي على استخدام كودك.
  • \n
\n\n

بدون اختبار C++، يكون المشروع كمنزل بُني بدون أساس. يبدو قائمًا، لكن أول زلزال (اقرأ: تغيير في المتطلبات) سيدمره.

\n\n

أدوات اختبار C++: اختر إطار العمل الأول لك

\n\n

لـ اختبارات الوحدة C++، هناك العديد من أطر العمل الشائعة. للمبتدئين، أوصي بإطارين: Google Test (gtest) و Catch2. كلاهما مجاني، ولهما توثيق ممتاز، وسهل الربط.

\n\n

Google Test (gtest)

\n

معيار الصناعة. يُستخدم في Google و YouTube والعديد من المشاريع مفتوحة المصدر. قوي، لكنه يتطلب بعض الإعداد.

\n\n

Catch2

\n

أخف وزنًا وأكثر "ودية" للمبتدئين. يُربط بملف رأس واحد. مثالي للبدء.

\n\n

في هذه المقالة، سنستخدم Catch2 - فهو بسيط ويسمح بالتركيز على الجوهر، وليس على الإعداد.

\n\n

كيفية تثبيت Catch2 وكتابة أول اختبار؟

\n\n

تثبيت Catch2 بسيط. قم بتنزيل ملف الرأس الوحيد catch.hpp من المستودع الرسمي وضعه في مجلد مشروعك. لا حاجة إلى cmake أو make أو ربط.

\n\n

الآن لنكتب برنامجًا بسيطًا بلغة C++ ونختبره.

\n\n

مثال: دالة الجمع

\n

أنشئ ملف calculator.cpp:

\n\n
#include <iostream>\n#include "catch.hpp"\n\n// الدالة التي سنختبرها\nint add(int a, int b) {\n    return a + b;\n}\n\n// اختبار\nTEST_CASE("Addition works correctly", "[math]") {\n    REQUIRE(add(2, 3) == 5);\n    REQUIRE(add(-1, 1) == 0);\n    REQUIRE(add(0, 0) == 0);\n    REQUIRE(add(100, 200) == 300);\n}
\n\n

الآن قم بترجمة وتشغيل:

\n\n
g++ -std=c++11 calculator.cpp -o calculator_test\n./calculator_test
\n\n

سترى شيئًا مثل:

\n\n
All tests passed (4 assertions in 1 test case)
\n\n

تهانينا! لقد كتبت أول اختبار وحدة C++ لك. دعنا نشرح ما حدث هنا:

\n
    \n
  • TEST_CASE - هو ماكرو ينشئ سيناريو اختبار.
  • \n
  • REQUIRE - يتحقق من الشرط. إذا كان خاطئًا، يفشل الاختبار.
  • \n
  • "[math]" - علامة لتجميع الاختبارات.
  • \n
\n\n

نصائح عملية: كيفية كتابة اختبارات جيدة

\n\n

مجرد كتابة اختبار لا يكفي. يجب كتابة اختبارات مفيدة. إليك بعض القواعد التي سترتقي بـ اختبار الوحدات الخاص بك

المدونات

توصيات الكتب