doctest لـ C++: دليل شامل مع أمثلة عملية

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

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

ابدأ الدورة

doctest لـ C++: دليل شامل مع أمثلة عملية

1. ما هو doctest ولماذا تحتاجه؟

doctest هو إطار عمل خفيف وموثق ذاتيًا لاختبار الوحدات في لغة C++. أبرز ميزاته هي سرعة الترجمة الفائقة وسهولة الاستخدام. على عكس الأطر الثقيلة مثل Google Test أو Boost.Test، فإن doctest هي مكتبة رأسية (header-only) يمكن تضمينها بسطر واحد فقط #include <doctest/doctest.h>. هذا يجعله الخيار الأمثل للمشاريع التي تهم فيها سرعة البناء وعدم وجود تبعيات خارجية.

لماذا تحتاج doctest؟ في تطوير C++ الحديث، اختبار الكود ليس ترفًا بل ضرورة. يتيح لك doctest كتابة الاختبارات بجوار تنفيذ الدوال مباشرة، مما يحسن readability ويسهل الصيانة. يمكنك تضمين الاختبارات في ملفات الرأس (header files)، وسيتم استبعادها تلقائيًا من البناء النهائي عند الترجمة بدون علمة -DDOCTEST_CONFIG_DISABLE. هذا يمنحك ميزة فريدة: تعيش الاختبارات مع الكود دون التأثير على أداء الإصدار النهائي.

يدعم doctest جميع معايير C++ الحديثة (C++11 وما فوق)، ويعمل على جميع المنصات الرئيسية (Windows, Linux, macOS)، ويتكامل بسهولة مع أنظمة التكامل المستمر (CI). يوفر مجموعة غنية من الماكرو (macros) للتحقق من الافتراضات، وتجميع الاختبارات، والتعامل مع الاستثناءات، وإنشاء التقارير. بفضل خفته، يُستخدم doctest غالبًا في التطوير المضمن (embedded)، ومحركات الألعاب، والمشاريع الأخرى حيث يكون كل كيلوبايت وكل ملي ثانية من الترجمة مهمًا.

2. التثبيت

doctest هي مكتبة رأسية (header-only)، لذا فإن التثبيت يقتصر على نسخ ملف الرأس إلى مشروعك. أسهل طريقة هي استخدام مدير الحزم vcpkg أو Conan، أو تنزيل الملف يدويًا.

الخيار 1: التثبيت عبر vcpkg (موصى به)

# قم بتثبيت vcpkg إذا لم يكن مثبتًا:
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh  # Linux/macOS
# أو .\bootstrap-vcpkg.bat (Windows)

# قم بتثبيت doctest:
./vcpkg install doctest

# قم بربطه بالمشروع عبر CMake:
# find_package(doctest CONFIG REQUIRED)
# target_link_libraries(your_target PRIVATE doctest::doctest)

الخيار 2: التثبيت عبر Conan

# أضف إلى ملف conanfile.txt:
[requires]
doctest/2.4.11

[generators]
cmake

# قم بالتثبيت:
conan install . --build=missing

الخيار 3: التثبيت اليدوي (ببساطة انسخ الملف)

# قم بتنزيل أحدث إصدار من GitHub:
wget https://raw.githubusercontent.com/doctest/doctest/master/doctest/doctest.h

# ضع الملف في مجلد include الخاص بمشروعك
# ثم في الكود استخدم ببساطة:
# #include "doctest.h"

بعد التثبيت، تأكد من أن المترجم يمكنه العثور على ملف الرأس. لتجميع الاختبارات، يكفي أي إصدار حديث من GCC أو Clang أو MSVC.

3. البداية السريعة — مثال عملي بسيط

أنشئ ملفًا باسم test_example.cpp بالمحتوى التالي:

#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
#include "doctest.h"

int factorial(int n) {
    if (n <= 1) return 1;
    return n * factorial(n - 1);
}

TEST_CASE("اختبار دالة المضروب") {
    CHECK(factorial(0) == 1);
    CHECK(factorial(1) == 1);
    CHECK(factorial(5) == 120);
    CHECK(factorial(10) == 3628800);
}

قم بتجميعه وتشغيله:

g++ -std=c++11 test_example.cpp -o test_example
./test_example

سترى الناتج التالي:

===========================================================================
[doctest] حالات الاختبار:    1 |    1 نجح |    0 فشل |    0 تم تخطيه
[doctest] التأكيدات:    4 |    4 نجحت |    0 فشلت |
[doctest] 

توصيات