بيئات الاختبار والإعداد
شارك إعداد الاختبارات
بيئات الاختبار والإعداد درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.
مشاركة الإعداد بين الاختبارات
عندما تحتاج عدة اختبارات إلى الكائنات نفسها، يتيح لكم fixture تعريف ذلك الإعداد مرة واحدة. وfixture هو فئة تشتق من ::testing::Test.
تعريف fixture
يمكن الوصول إلى أعضاء fixture في كل اختبار يستخدمه. وتُنفَّذ SetUp() قبل كل اختبار، بينما تُنفَّذ TearDown() بعده.
#include <gtest/gtest.h>
#include <vector>
class VectorTest : public ::testing::Test {
protected:
std::vector<int> v;
void SetUp() override { v = {1, 2, 3}; }
};استخدام TEST_F
تُكتب الاختبارات التي تستخدم fixture باستخدام TEST_F، مع تمرير اسم فئة fixture كالمعامل الأول.
#include <gtest/gtest.h>
#include <vector>
class VectorTest : public ::testing::Test {
protected:
std::vector<int> v{1, 2, 3};
};
TEST_F(VectorTest, HasThree) {
EXPECT_EQ(v.size(), 3u);
}
TEST_F(VectorTest, FirstIsOne) {
EXPECT_EQ(v.front(), 1);
}مثيل جديد لكل اختبار
ينشئ GTest كائن fixture جديدًا لكل اختبار. ولا تتشارك الاختبارات الحالة القابلة للتغيير، ولذلك تظل مستقلة ولا يهم ترتيبها.
الفرق بين SetUp والمنشئ
يمكنكم تهيئة الأعضاء في المنشئ أو في SetUp(). استخدموا SetUp() عندما تكون التهيئة قابلة لإلقاء استثناء، أو عندما تريدون استدعاء الدوال الافتراضية بأمان.
#include <gtest/gtest.h>
class Resource : public ::testing::Test {
protected:
int* data = nullptr;
void SetUp() override { data = new int(10); }
void TearDown() override { delete data; }
};
TEST_F(Resource, HasTen) {
EXPECT_EQ(*data, 10);
}استخدام TearDown للتنظيف
تحرر TearDown() الموارد التي تم الحصول عليها في SetUp(). ومع أعضاء RAII، يتولى المدمّر هذا الأمر غالبًا تلقائيًا، وقد لا تحتاجون إلى TearDown() مطلقًا.
إعداد على مستوى مجموعة الاختبار
بالنسبة إلى الموارد المشتركة المكلفة، استخدموا SetUpTestSuite() وTearDownTestSuite() الثابتتين. إذ تُنفَّذ كل منهما مرة واحدة لكل مجموعة اختبار، لا لكل اختبار.
#include <gtest/gtest.h>
class DbTest : public ::testing::Test {
protected:
static void SetUpTestSuite() { /* open shared connection */ }
static void TearDownTestSuite() { /* close it */ }
};لكل اختبار أم لكل مجموعة؟
اختاروا بعناية.
SetUp/TearDown: لكل اختبار، مع عزل وأمانSetUpTestSuite/TearDownTestSuite: لكل مجموعة، ومشتركة وأسرع، لكن قد تتداخل الاختبارات
الدوال المساعدة
يمكن أن تحتوي fixtures على دوال مساعدة تستخدمها اختبارات متعددة، مما يحافظ على تركيز كل اختبار على توكيداته.
#include <gtest/gtest.h>
#include <string>
class ParserTest : public ::testing::Test {
protected:
int parse(const std::string& s) { return std::stoi(s); }
};
TEST_F(ParserTest, ParsesNumber) {
EXPECT_EQ(parse("42"), 42);
}البيئة العامة
للإعداد على مستوى العملية، والذي يُنفَّذ مرة واحدة قبل أي اختبار، سجّلوا ::testing::Environment باستخدام AddGlobalTestEnvironment. وهذا مفيد للتسجيل أو لتهيئة الإطار.
الحفاظ على استقلالية الاختبارات
بما أن كل TEST_F يحصل على fixture جديد، فلا تعتمدوا مطلقًا على الآثار الجانبية لاختبار آخر. تجعل الاستقلالية حالات الفشل سهلة التشخيص، وتجعل الاختبارات آمنة للتشغيل بالتوازي.
اختبار سريع
تذكّروا دورة حياة fixture.
مراجعة
لقد تعلمتم استخدام fixtures.
- اشتقوا من
::testing::TestواستخدمواTEST_F - تُنفَّذ
SetUp/TearDownلكل اختبار، مع كائن جديد في كل مرة - استخدموا
SetUpTestSuiteللموارد المشتركة التي تُهيَّأ مرة واحدة لكل مجموعة - تساعد الدوال المساعدة والبيئات العامة في مجموعات الاختبار الأكبر
الأسئلة الشائعة
هل درس «بيئات الاختبار والإعداد» مجاني؟
نعم — نص درس «بيئات الاختبار والإعداد» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.
ماذا ستتعلم في «بيئات الاختبار والإعداد»؟
شارك إعداد الاختبارات تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟
لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «بيئات الاختبار والإعداد»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟
نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- إعداد GTest
- التأكيدات والمطابقات
- بيئات الاختبار والإعداد
- المحاكاة باستخدام GMock