التأكيدات والمطابقات
اكتب فحوصات واضحة ومعبرّة
التأكيدات والمطابقات درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.
التوكيدات تعبّر عن التوقعات
تتحقق توكيدات GTest من الشروط داخل الاختبار. وهي تأتي بدرجتين من الشدة.
EXPECT_*: يسجّل الفشل ويواصل الاختبارASSERT_*: يوقف الاختبار الحالي فورًا عند الفشل
الفرق بين EXPECT و ASSERT
استخدموا ASSERT_* عندما قد يؤدي الاستمرار إلى انهيار البرنامج، مثلًا بعد التحقق من مؤشر صفري، واستخدموا EXPECT_* في الحالات الأخرى حتى تروا جميع حالات الفشل دفعة واحدة.
#include <gtest/gtest.h>
TEST(Demo, MixedChecks) {
int* p = new int(5);
ASSERT_NE(p, nullptr);
EXPECT_EQ(*p, 5);
delete p;
}توكيدات المقارنة
ماكروهات المقارنة الأساسية:
EXPECT_EQوEXPECT_NEEXPECT_LTوEXPECT_LEEXPECT_GTوEXPECT_GE
#include <gtest/gtest.h>
TEST(Compare, Numbers) {
EXPECT_LT(2, 3);
EXPECT_GE(5, 5);
}التوكيدات المنطقية
يتحقق EXPECT_TRUE وEXPECT_FALSE مباشرةً من الشروط المنطقية.
#include <gtest/gtest.h>
bool is_even(int n) { return n % 2 == 0; }
TEST(Bool, Even) {
EXPECT_TRUE(is_even(4));
EXPECT_FALSE(is_even(3));
}مقارنة الأعداد العشرية
لا تستخدموا EXPECT_EQ مطلقًا مع الأعداد العشرية. استخدموا EXPECT_FLOAT_EQ أو EXPECT_DOUBLE_EQ أو EXPECT_NEAR مع سماحية.
#include <gtest/gtest.h>
TEST(Floats, Approx) {
EXPECT_DOUBLE_EQ(0.1 + 0.2, 0.3);
EXPECT_NEAR(3.14159, 3.14, 0.01);
}توكيدات السلاسل النصية
استخدموا EXPECT_STREQ / EXPECT_STRNE مع سلاسل C. أما مع std::string، فيعمل EXPECT_EQ لأنه يقارن حسب القيمة.
#include <gtest/gtest.h>
#include <string>
TEST(Strings, Compare) {
EXPECT_STREQ("hi", "hi");
EXPECT_EQ(std::string("ok"), "ok");
}توكيدات الاستثناءات
تحققوا من أن الكود يرمي الاستثناء المتوقع.
#include <gtest/gtest.h>
#include <stdexcept>
void check(int n) {
if (n < 0) throw std::runtime_error("neg");
}
TEST(Throws, Negative) {
EXPECT_THROW(check(-1), std::runtime_error);
EXPECT_NO_THROW(check(1));
}رسائل فشل مخصصة
أضيفوا سياقًا إضافيًا إلى التوكيد باستخدام << لتسهيل تشخيص حالات الفشل.
#include <gtest/gtest.h>
TEST(Message, WithContext) {
int x = 7;
EXPECT_EQ(x, 7) << "x had unexpected value " << x;
}مطابقات GMock مع EXPECT_THAT
يجمع EXPECT_THAT بين قيمة ومطابق لإجراء عمليات تحقق واضحة تعبيريًا، مثل EXPECT_THAT(v, ElementsAre(1, 2, 3)).
#include <gtest/gtest.h>
#include <gmock/gmock.h>
#include <vector>
using ::testing::ElementsAre;
TEST(Matchers, Vector) {
std::vector<int> v{1, 2, 3};
EXPECT_THAT(v, ElementsAre(1, 2, 3));
}مطابقات مفيدة
تتضمن المطابقات الشائعة:
EqوNeوGtوLtContainsوElementsAreوUnorderedElementsAreHasSubstrوStartsWithوEndsWith
اختيار التوكيد المناسب
فضّلوا التوكيد الأكثر تحديدًا؛ فهو ينتج رسائل فشل أوضح من EXPECT_TRUE العام. يطبع EXPECT_EQ(a, b) القيمتين، بينما لا يفعل EXPECT_TRUE(a == b) ذلك.
اختبار سريع
تذكّروا الفرق بين EXPECT وASSERT.
مراجعة
لقد تعلمتم توكيدات GTest.
- يواصل
EXPECT_*الاختبار، بينما يوقفASSERT_*الاختبار - ماكروهات للمقارنة والقيم المنطقية والأعداد العشرية والسلاسل النصية والاستثناءات
- أضيفوا سياقًا إضافيًا باستخدام
<< - استخدموا
EXPECT_THATمع المطابقات لإجراء عمليات تحقق واضحة تعبيريًا
الأسئلة الشائعة
هل درس «التأكيدات والمطابقات» مجاني؟
نعم — نص درس «التأكيدات والمطابقات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.
ماذا ستتعلم في «التأكيدات والمطابقات»؟
اكتب فحوصات واضحة ومعبرّة تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟
لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «التأكيدات والمطابقات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟
نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- إعداد GTest
- التأكيدات والمطابقات
- بيئات الاختبار والإعداد
- المحاكاة باستخدام GMock