0Pricing
C++ Academy · บทเรียน

ฟิกซ์เจอร์และการตั้งค่า

ใช้การตั้งค่าการทดสอบร่วมกัน

ฟิกซ์เจอร์และการตั้งค่า เป็นบทเรียน C++ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C++ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

การใช้การตั้งค่าร่วมกันระหว่างการทดสอบ

เมื่อการทดสอบหลายรายการต้องใช้ออบเจ็กต์เดียวกัน ฟิกซ์เจอร์ จะช่วยให้คุณกำหนดการตั้งค่านั้นเพียงครั้งเดียว ฟิกซ์เจอร์คือคลาสที่สืบทอดจาก ::testing::Test

การกำหนดฟิกซ์เจอร์

สมาชิกของฟิกซ์เจอร์จะเข้าถึงได้ในการทดสอบแต่ละรายการที่ใช้ฟิกซ์เจอร์นั้น 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

การทดสอบที่ใช้ฟิกซ์เจอร์จะเขียนด้วย TEST_F โดยส่งชื่อคลาสของฟิกซ์เจอร์เป็นอาร์กิวเมนต์ตัวแรก

#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 จะสร้าง ออบเจ็กต์ฟิกซ์เจอร์ใหม่สำหรับการทดสอบทุกครั้ง การทดสอบจะไม่ใช้สถานะที่เปลี่ยนแปลงได้ร่วมกัน จึงเป็นอิสระต่อกันและไม่ขึ้นกับลำดับการทำงาน

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() แบบ static ทั้งสองจะทำงานหนึ่งครั้งต่อชุดการทดสอบ ไม่ใช่หนึ่งครั้งต่อการทดสอบ

#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: ทำงานต่อชุดการทดสอบ ใช้ร่วมกัน และเร็วกว่า แต่การทดสอบอาจรบกวนกัน

เมธอดตัวช่วย

ฟิกซ์เจอร์สามารถเก็บเมธอดตัวช่วยที่การทดสอบหลายรายการใช้ร่วมกันได้ ทำให้การทดสอบแต่ละรายการมุ่งเน้นไปที่การตรวจสอบยืนยันของตนเอง

#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 แต่ละรายการได้รับฟิกซ์เจอร์ใหม่ จึงอย่าพึ่งพาผลข้างเคียงจากการทดสอบอื่น ความเป็นอิสระทำให้วิเคราะห์ความล้มเหลวได้ง่าย และทำให้การทดสอบปลอดภัยเมื่อต้องทำงานพร้อมกัน

ตรวจสอบอย่างรวดเร็ว

ทบทวนวงจรชีวิตของฟิกซ์เจอร์

สรุปทบทวน

คุณได้เรียนรู้เรื่องฟิกซ์เจอร์

  • สืบทอดจาก ::testing::Test และใช้ TEST_F
  • SetUp/TearDown ทำงานต่อการทดสอบ และสร้างออบเจ็กต์ใหม่ทุกครั้ง
  • SetUpTestSuite ใช้สำหรับทรัพยากรร่วมที่สร้างครั้งเดียวต่อชุดการทดสอบ
  • ตัวช่วยและสภาพแวดล้อมส่วนกลางช่วยสนับสนุนชุดการทดสอบขนาดใหญ่

คำถามที่พบบ่อย

บทเรียน “ฟิกซ์เจอร์และการตั้งค่า” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ฟิกซ์เจอร์และการตั้งค่า” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C++ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ฟิกซ์เจอร์และการตั้งค่า”

ใช้การตั้งค่าการทดสอบร่วมกัน คุณปฏิบัติ C++ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C++ Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C++ Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “ฟิกซ์เจอร์และการตั้งค่า” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C++ Academy นี้ได้ไหม

ได้ บทเรียน C++ Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การตั้งค่า GTest
  2. การยืนยันและตัวจับคู่
  3. ฟิกซ์เจอร์และการตั้งค่า
  4. การจำลองด้วย GMock
← กลับไปที่ C++ Academy