การยืนยันและตัวจับคู่
เขียนการตรวจสอบที่สื่อความหมาย
การยืนยันและตัวจับคู่ เป็นบทเรียน C++ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C++ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน
การตรวจสอบยืนยันแสดงความคาดหวัง
การตรวจสอบยืนยันของ GTest ใช้ตรวจสอบเงื่อนไขภายในการทดสอบ โดยมีความรุนแรงอยู่สองระดับ
EXPECT_*: บันทึกความล้มเหลวไว้ แต่การทดสอบดำเนินต่อASSERT_*: ความล้มเหลวจะหยุดการทดสอบปัจจุบันทันที
EXPECT เทียบกับ ASSERT
ใช้ ASSERT_* เมื่อการดำเนินการต่ออาจทำให้โปรแกรมหยุดทำงาน (เช่น หลังตรวจสอบค่า null) และใช้ 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);
}การตรวจสอบยืนยันสตริง
สำหรับสตริงแบบ C ให้ใช้ EXPECT_STREQ / EXPECT_STRNE สำหรับ 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+ ตัวจับคู่สำหรับการตรวจสอบที่สื่อความหมาย
คำถามที่พบบ่อย
บทเรียน “การยืนยันและตัวจับคู่” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การยืนยันและตัวจับคู่” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C++ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การยืนยันและตัวจับคู่”
เขียนการตรวจสอบที่สื่อความหมาย คุณปฏิบัติ C++ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C++ Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน C++ Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การยืนยันและตัวจับคู่” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน C++ Academy นี้ได้ไหม
ได้ บทเรียน C++ Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การตั้งค่า GTest
- การยืนยันและตัวจับคู่
- ฟิกซ์เจอร์และการตั้งค่า
- การจำลองด้วย GMock