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