มีตัวแปรมากมายที่จะกำหนดกรอบการทดสอบหน่วยที่ดีที่สุดที่จะใช้ในสถานการณ์ของคุณ บางรายการที่อาจมีผลต่อการเลือกของคุณคือ:
- ภาษาเป้าหมาย
- รองรับห้องสมุดอะไรบ้าง เช่น libc หรือเวอร์ชันที่ตัดทอนไป
- ระบบปฏิบัติการของเป้าหมาย เช่นไม่มี, FreeRTOS, กำหนดเอง
เฟรมเวิร์กชนิด xUnit ส่วนใหญ่จะให้ระดับการทำงานพื้นฐานบางอย่างซึ่งอาจมีประโยชน์ ฉันเคยใช้Cunitกับความสำเร็จในอดีต (แพคเกจ libcunit1-dev บน Ubuntu / Debian) เฟรมเวิร์กส่วนใหญ่จะต้องใช้ libc เพื่อให้สามารถใช้ได้บางส่วนจะต้องใช้การสนับสนุนระบบปฏิบัติการเพิ่มเติม
altermative ซึ่งเป็นเพียง 3 สายยาวก็คือMinunit
ฉันพบว่าการทดสอบหน่วยโดยใช้ไมโครคอนโทรลเลอร์เป็นเป้าหมายที่ค่อนข้างยุ่งยากเพราะคุณต้องสามารถนำเสนอสภาพแวดล้อมที่เหมาะสมสำหรับการดาวน์โหลดการทดสอบเรียกใช้พวกเขาแล้วจึงได้ผลลัพธ์กลับมา เพิ่งได้รับแพลตฟอร์มในสถานที่ซึ่งจะช่วยให้คุณทำเช่นนี้เป็นงานใหญ่
อีกวิธีที่ฉันใช้ซึ่งได้ผลสำหรับฉันคือทำการทดสอบหน่วยบนโฮสต์โดยใช้เลเยอร์นามธรรมระหว่างไดรเวอร์และรหัสแอปพลิเคชัน เนื่องจากคุณใช้ gcc สำหรับเป้าหมายรหัสควรคอมไพล์บนโฮสต์ด้วย
การทดสอบในโฮสต์คอมไพล์นั้นง่ายกว่ามากเนื่องจากคุณได้รับการสนับสนุนอย่างสมบูรณ์จากโฮสต์ระบบปฏิบัติการและเครื่องมือทั้งหมด ตัวอย่างเช่นเมื่อทำการทดสอบกับโฮสต์ฉันมีไดร์เวอร์ไร้สายรุ่นที่จำลองมาด้วยอินเทอร์เฟซเดียวกับไดรเวอร์จริงที่ทำงานบนเป้าหมาย รุ่นโฮสต์ใช้แพ็คเก็ต UDP เพื่อจำลองการถ่ายโอนแพ็คเก็ตไร้สายด้วยไดรเวอร์จำลองที่สนับสนุนความสามารถในการปล่อยแพ็คเก็ตเพื่อให้ฉันสามารถทดสอบโปรโตคอลของฉัน
ในผลิตภัณฑ์ที่ฉันทำงานอยู่มีการใช้ระบบปฏิบัติการเธรดดังนั้นเลเยอร์นามธรรมสำหรับการทดสอบบนโฮสต์ระบบจึงใช้ pthreads แทน
ในขณะที่ไม่สมบูรณ์แบบยิ่งง่ายขึ้นสำหรับคุณที่จะเขียนและเรียกใช้การทดสอบมีแนวโน้มมากขึ้นที่คุณจะใช้กรณีทดสอบมากขึ้น ข้อดีอีกอย่างของการใช้โค้ดในแพลตฟอร์มที่แตกต่างกันคือการทดสอบว่าโค้ดนั้นพกพาได้ คุณจะรับข้อผิดพลาด endian ได้อย่างรวดเร็วหากเป้าหมายและสถาปัตยกรรมโฮสต์แตกต่างกัน
ตอนนี้ฉันค่อนข้างหัวข้อ แต่ความคิดเหล่านี้อาจช่วยคุณเลือกกรอบการทดสอบและวิธีทดสอบ