Catch2 ส่วนใหญ่เป็นเฟรมเวิร์กการทดสอบหน่วยสำหรับ C++ แต่ยังมีคุณสมบัติการเปรียบเทียบขนาดเล็กขั้นพื้นฐาน และมาโคร BDD แบบง่าย
ข้อได้เปรียบหลักของ Catch2 คือการใช้งานที่เรียบง่ายและเป็นธรรมชาติ ชื่อการทดสอบไม่จำเป็นต้องเป็นตัวระบุที่ถูกต้อง การยืนยันจะดูเหมือนนิพจน์บูลีน C++ ปกติ และส่วนต่างๆ เป็นวิธีที่ดีในการแชร์โค้ดการตั้งค่าและการแยกส่วนในการทดสอบ
ตัวอย่างการทดสอบหน่วย
# include < catch2/catch_test_macros.hpp >
# include < cstdint >
uint32_t factorial ( uint32_t number ) {
return number <= 1 ? number : factorial (number- 1 ) * number;
}
TEST_CASE ( " Factorials are computed " , " [factorial] " ) {
REQUIRE ( factorial ( 1 ) == 1 );
REQUIRE ( factorial ( 2 ) == 2 );
REQUIRE ( factorial ( 3 ) == 6 );
REQUIRE ( factorial ( 10 ) == 3'628'800 );
}
ตัวอย่างไมโครเบนช์มาร์ก
# include < catch2/catch_test_macros.hpp >
# include < catch2/benchmark/catch_benchmark.hpp >
# include < cstdint >
uint64_t fibonacci ( uint64_t number) {
return number < 2 ? number : fibonacci (number - 1 ) + fibonacci (number - 2 );
}
TEST_CASE ( " Benchmark Fibonacci " , " [!benchmark] " ) {
REQUIRE ( fibonacci ( 5 ) == 5 );
REQUIRE ( fibonacci ( 20 ) == 6'765 );
BENCHMARK ( " fibonacci 20 " ) {
return fibonacci ( 20 );
};
REQUIRE ( fibonacci ( 25 ) == 75'025 );
BENCHMARK ( " fibonacci 25 " ) {
return fibonacci ( 25 );
};
}
โปรดทราบว่าการวัดประสิทธิภาพไม่ได้ทำงานตามค่าเริ่มต้น ดังนั้นคุณจึงต้องเรียกใช้การวัดประสิทธิภาพอย่างชัดเจนด้วยแท็ก [!benchmark]
คุณอยู่ในสาขา devel
ซึ่งเวอร์ชัน v3 กำลังได้รับการพัฒนา v3 นำมาซึ่งการเปลี่ยนแปลงที่สำคัญมากมาย การเปลี่ยนแปลงครั้งใหญ่คือ Catch2 ไม่ใช่ไลบรารีแบบส่วนหัวเดียวอีกต่อไป ตอนนี้ Catch2 ทำงานเหมือนไลบรารีปกติที่มีหลายส่วนหัวและการใช้งานที่คอมไพล์แยกกัน
เอกสารประกอบกำลังได้รับการอัปเดตอย่างช้าๆ เพื่อคำนึงถึงการเปลี่ยนแปลงเหล่านี้ แต่ขณะนี้งานนี้ยังดำเนินการอยู่
สำหรับการย้ายจากรุ่น v2 ไปเป็น v3 คุณควรดูเอกสารประกอบของเรา โดยมีแนวทางง่ายๆ ในการเริ่มต้น และรวบรวมปัญหาการย้ายข้อมูลที่พบบ่อยที่สุด
สำหรับ Catch2 เวอร์ชันหลักก่อนหน้านี้ โปรดดูสาขา v2.x
ที่นี่บน GitHub
เอกสารนี้ประกอบด้วยสามส่วนเหล่านี้: