Emacs เป็นตัวอย่างที่ดีของสิ่งนี้:
การทดสอบ Emacs Lisp ใช้skip-unless
และlet-bind
ทำการตรวจจับและทดสอบคุณสมบัติ:
บางครั้งมันไม่สมเหตุสมผลเลยที่จะทำการทดสอบเนื่องจากไม่มีเงื่อนไขเบื้องต้น คุณสมบัติ Emacs ที่ต้องการอาจไม่ได้รวบรวมไว้ฟังก์ชันที่จะทดสอบสามารถเรียกเลขฐานสองภายนอกซึ่งอาจไม่สามารถใช้กับเครื่องทดสอบได้ ในกรณีนี้skip-unless
สามารถใช้แมโครเพื่อข้ามการทดสอบ:
(ert-deftest test-dbus ()
"A test that checks D-BUS functionality."
(skip-unless (featurep 'dbusbind))
...)
ผลลัพธ์ของการรันการทดสอบไม่ควรขึ้นอยู่กับสถานะปัจจุบันของสภาพแวดล้อมและการทดสอบแต่ละครั้งควรปล่อยให้สภาพแวดล้อมอยู่ในสภาพเดียวกันกับที่พบโดยเฉพาะอย่างยิ่งการทดสอบไม่ควรขึ้นอยู่กับตัวแปรหรือตะขอของ Emacs เองและ หากต้องทำการเปลี่ยนแปลงใด ๆ กับสถานะของ Emacs หรือสถานะภายนอกของ Emacs (เช่นระบบไฟล์) ควรยกเลิกการเปลี่ยนแปลงเหล่านี้ก่อนที่จะส่งคืนโดยไม่คำนึงว่าจะผ่านหรือล้มเหลว
การทดสอบไม่ควรขึ้นอยู่กับสภาพแวดล้อมเพราะการพึ่งพาดังกล่าวสามารถทำให้การทดสอบเปราะหรือนำไปสู่ความล้มเหลวที่เกิดขึ้นภายใต้สถานการณ์บางอย่างเท่านั้นและยากที่จะทำซ้ำ แน่นอนรหัสภายใต้การทดสอบอาจมีการตั้งค่าที่มีผลต่อพฤติกรรมของมัน ในกรณีนั้นเป็นการดีที่สุดที่จะทำการทดสอบlet-bind
ตัวแปรการตั้งค่าทั้งหมดเพื่อตั้งค่าการกำหนดค่าเฉพาะสำหรับช่วงเวลาของการทดสอบ การทดสอบยังสามารถตั้งค่าการกำหนดค่าที่แตกต่างกันจำนวนหนึ่งและเรียกใช้รหัสภายใต้การทดสอบกับแต่ละ
เช่นเดียวกับ SQLite นี่คือการออกแบบ:
sqlite3_open () →เปิดการเชื่อมต่อกับฐานข้อมูล SQLite ใหม่หรือที่มีอยู่ คอนสตรัคสำหรับ sqlite3
sqlite3 →วัตถุเชื่อมต่อฐานข้อมูล สร้างโดย sqlite3_open () และถูกทำลายโดย sqlite3_close ()
sqlite3_stmt →วัตถุคำสั่งที่เตรียมไว้ สร้างโดย sqlite3_prepare () และถูกทำลายโดย sqlite3_finalize ()
sqlite3_prepare () →รวบรวมข้อความ SQL เป็นรหัสไบต์ที่จะทำงานของการสืบค้นหรือปรับปรุงฐานข้อมูล คอนสตรัคสำหรับ sqlite3_stmt
sqlite3_bind () →จัดเก็บข้อมูลแอปพลิเคชันลงในพารามิเตอร์ของ SQL ดั้งเดิม
sqlite3_step () →เลื่อน sqlite3_stmt ไปยังแถวผลลัพธ์ถัดไปหรือจนจบ
sqlite3_column () →ค่าคอลัมน์ในแถวผลลัพธ์ปัจจุบันสำหรับ sqlite3_stmt
sqlite3_finalize () → Destructor สำหรับ sqlite3_stmt
sqlite3_exec () →ฟังก์ชั่น wrapper ที่ทำ sqlite3_prepare (), sqlite3_step (), sqlite3_column (), และ sqlite3_finalize () สำหรับสตริงของคำสั่ง SQL ตั้งแต่หนึ่งประโยคขึ้นไป
sqlite3_close () → Destructor สำหรับ sqlite3
คอมโพเนนต์ Tokenizer, Parser และ Code Generator ใช้ในการประมวลผลคำสั่ง SQL และแปลงเป็นโปรแกรมที่ปฏิบัติการได้ในภาษาเครื่องเสมือนหรือรหัสไบต์ พูดประมาณชั้นนำเหล่านี้สามชั้นใช้sqlite3_prepare_v2 () โค้ดไบต์ที่สร้างโดยสามเลเยอร์แรกเป็นคำสั่งที่เตรียมไว้. โมดูลเครื่องเสมือนมีหน้าที่ในการเรียกใช้รหัสไบต์คำสั่ง SQL โมดูล B-Tree จัดระเบียบไฟล์ฐานข้อมูลลงในร้านค้าคีย์ / ค่าหลายแห่งพร้อมกับคีย์ที่สั่งซื้อและประสิทธิภาพลอการิทึม โมดูลเพจเจอร์มีหน้าที่ในการโหลดหน้าของไฟล์ฐานข้อมูลลงในหน่วยความจำสำหรับการใช้งานและการควบคุมการทำธุรกรรมและสำหรับการสร้างและบำรุงรักษาไฟล์เจอร์นัลที่ป้องกันความเสียหายของฐานข้อมูลหลังจากเกิดความผิดพลาดหรือไฟดับ อินเทอร์เฟซระบบปฏิบัติการเป็นนามธรรมที่ให้ชุดของรูทีนทั่วไปสำหรับการปรับ SQLite ให้ทำงานบนระบบปฏิบัติการที่แตกต่างกัน พูดประมาณด้านล่างสี่ชั้นใช้sqlite3_step ()
ตารางเสมือนเป็นวัตถุที่ลงทะเบียนกับการเชื่อมต่อฐานข้อมูล SQLite แบบเปิด จากมุมมองของคำสั่ง SQL วัตถุตารางเสมือนจะดูเหมือนกับตารางหรือมุมมองอื่น ๆ แต่เบื้องหลังการสืบค้นและการปรับปรุงในตารางเสมือนจะเรียกวิธีการโทรกลับของวัตถุตารางเสมือนแทนการอ่านและการเขียนบนไฟล์ฐานข้อมูล
ตารางเสมือนอาจแสดงโครงสร้างข้อมูลในหน่วยความจำ หรืออาจแสดงมุมมองข้อมูลบนดิสก์ที่ไม่ได้อยู่ในรูปแบบ SQLite หรือแอปพลิเคชันอาจคำนวณเนื้อหาของตารางเสมือนตามต้องการ
นี่คือการใช้งานที่มีอยู่และได้รับการจดทะเบียนสำหรับตารางเสมือน:
อินเตอร์เฟซการค้นหาข้อความแบบเต็ม
ดัชนีเชิงพื้นที่โดยใช้ R-Trees
ใคร่ครวญเนื้อหาดิสก์ของไฟล์ฐานข้อมูล SQLite (ตารางเสมือน dbstat)
อ่านและ / หรือเขียนเนื้อหาของไฟล์ค่าที่คั่นด้วยเครื่องหมายจุลภาค (CSV)
เข้าถึงระบบไฟล์ของโฮสต์คอมพิวเตอร์ราวกับว่าเป็นตารางฐานข้อมูล
การเปิดใช้งานการจัดการข้อมูล SQL ในแพ็คเกจสถิติเช่น R
SQLite ใช้เทคนิคการทดสอบที่หลากหลายรวมถึง:
ชุดทดสอบที่พัฒนาขึ้นอย่างอิสระสามชุด
ครอบคลุมการทดสอบสาขา 100% ในการกำหนดค่าแบบไม่ใช้งาน
กรณีทดสอบหลายล้านรายการ
การทดสอบหน่วยความจำไม่เพียงพอ
การทดสอบข้อผิดพลาด I / O
การทดสอบการชนและการสูญเสียพลังงาน
การทดสอบฝอย
การทดสอบค่าขอบเขต
ปิดใช้งานการทดสอบการเพิ่มประสิทธิภาพ
การทดสอบการถดถอย
การทดสอบฐานข้อมูลผิดรูปแบบ
การใช้งาน assert () และการตรวจสอบเวลาทำงานอย่างกว้างขวาง
การวิเคราะห์ Valgrind
ตรวจสอบพฤติกรรมที่ไม่ได้กำหนด
รายการตรวจสอบ
อ้างอิง