ฉันคิดว่าฉันจะเพิ่มอีกสี่กรณีที่ Debug.Assert สามารถเป็นทางเลือกที่เหมาะสม
1)สิ่งที่ฉันไม่ได้เห็นกล่าวถึงที่นี่เป็นความคุ้มครองเพิ่มเติมแนวคิดอ้างสามารถให้ในระหว่างการทดสอบแบบอัตโนมัติ เป็นตัวอย่างง่ายๆ:
เมื่อผู้เรียกระดับสูงบางคนถูกแก้ไขโดยผู้เขียนที่เชื่อว่าพวกเขาได้ขยายขอบเขตของรหัสเพื่อจัดการกับสถานการณ์เพิ่มเติมนึกคิด (!) พวกเขาจะเขียนการทดสอบหน่วยเพื่อครอบคลุมเงื่อนไขใหม่นี้ มันอาจเป็นไปได้ว่ารหัสที่ผสานกันแบบสมบูรณ์นั้นทำงานได้ดี
อย่างไรก็ตามจริง ๆ แล้วมีข้อบกพร่องเล็กน้อยได้รับการแนะนำ แต่ไม่พบในผลการทดสอบ ผู้เข้าร่วมไม่ได้กำหนดไว้ในกรณีนี้และเกิดขึ้นเพื่อให้ผลลัพธ์ที่คาดหวังเท่านั้น หรือบางทีมันทำให้เกิดข้อผิดพลาดในการปัดเศษที่ไม่มีใครสังเกตเห็น หรือทำให้เกิดข้อผิดพลาดที่ได้รับการชดเชยอย่างเท่าเทียมกันที่อื่น หรือได้รับไม่เพียง แต่การเข้าถึงที่ร้องขอ แต่สิทธิ์เพิ่มเติมที่ไม่ควรได้รับ เป็นต้น
ณ จุดนี้งบ Debug.Assert () ที่มีอยู่ใน callee ควบคู่ไปกับกรณีใหม่ (หรือกรณีขอบ) ที่ขับเคลื่อนโดยการทดสอบหน่วยสามารถให้การแจ้งเตือนที่ทรงคุณค่าในระหว่างการทดสอบว่าสมมติฐานของผู้เขียนต้นฉบับที่ถูกต้องและรหัสไม่ควร ได้รับการปล่อยตัวโดยไม่มีการตรวจสอบเพิ่มเติม การยืนยันด้วยการทดสอบหน่วยเป็นคู่หูที่สมบูรณ์แบบ
2)นอกจากนี้การทดสอบบางอย่างจะง่ายต่อการเขียน แต่ค่าใช้จ่ายสูงและไม่จำเป็นที่กำหนดสมมติฐานเริ่มต้น ตัวอย่างเช่น:
หากวัตถุสามารถเข้าถึงได้จากจุดเข้าใช้ที่ปลอดภัยเท่านั้นควรสอบถามเพิ่มเติมกับฐานข้อมูลสิทธิ์เครือข่ายจากทุกวิธีวัตถุเพื่อให้แน่ใจว่าผู้โทรมีสิทธิ์หรือไม่ ไม่แน่นอน บางทีทางออกที่ดีที่สุดอาจรวมถึงการแคชหรือการขยายคุณสมบัติอื่น ๆ แต่การออกแบบไม่จำเป็นต้องใช้ Debug.Assert () จะปรากฏขึ้นทันทีเมื่อวัตถุถูกแนบกับจุดเข้าที่ไม่ปลอดภัย
3)ถัดไปในบางกรณีของผลิตภัณฑ์อาจไม่มีปฏิสัมพันธ์วินิจฉัยเป็นประโยชน์สำหรับการทั้งหมดหรือบางส่วนของการดำเนินงานเมื่อนำไปใช้งานในโหมดการเปิดตัว ตัวอย่างเช่น:
สมมติว่ามันเป็นอุปกรณ์เรียลไทม์ที่ฝังตัว โยนข้อยกเว้นและเริ่มใหม่เมื่อพบแพ็กเก็ตที่มีรูปแบบไม่ถูกต้อง แต่อุปกรณ์อาจได้รับประโยชน์จากการใช้งานที่ดีที่สุดแม้กระทั่งจุดที่แสดงสัญญาณรบกวนในเอาต์พุต นอกจากนี้ยังอาจไม่มีอินเทอร์เฟซสำหรับมนุษย์อุปกรณ์บันทึกหรือแม้กระทั่งมนุษย์สามารถเข้าถึงได้โดยทางกายภาพเมื่อทำการติดตั้งในโหมดการปล่อยและการรับรู้ข้อผิดพลาดจะดีที่สุดโดยการประเมินผลลัพธ์เดียวกัน ในกรณีนี้การยืนยันแบบเสรีและการทดสอบก่อนเผยแพร่อย่างละเอียดมีค่ามากกว่าข้อยกเว้น
4)สุดท้ายการทดสอบบางอย่างนั้นไม่จำเป็นเพราะผู้ถูกมองว่ามีความน่าเชื่อถือมาก ในกรณีส่วนใหญ่รหัสที่นำมาใช้ซ้ำได้มากขึ้นคือความพยายามมากขึ้นที่ทำให้เชื่อถือได้ ดังนั้นจึงเป็นเรื่องปกติที่จะมีข้อยกเว้นสำหรับพารามิเตอร์ที่ไม่คาดคิดจากผู้โทร แต่ยืนยันสำหรับผลลัพธ์ที่ไม่คาดคิดจาก callees ตัวอย่างเช่น:
หากการString.Find
ดำเนินการหลักระบุว่าจะส่งคืน-1
เมื่อไม่พบเกณฑ์การค้นหาคุณอาจสามารถดำเนินการหนึ่งอย่างปลอดภัยแทนที่จะดำเนินการสามข้อ อย่างไรก็ตามหากมีการส่งคืนจริง-2
คุณอาจไม่มีแนวทางที่เหมาะสม มันจะไม่เป็นประโยชน์ในการแทนที่การคำนวณที่ง่ายกว่าด้วยการทดสอบที่แยกต่างหากสำหรับ-1
ค่าและไม่มีเหตุผลในสภาพแวดล้อมการปล่อยส่วนใหญ่เพื่อทิ้งรหัสของคุณด้วยการทดสอบเพื่อให้มั่นใจว่าไลบรารีหลักทำงานได้ตามที่คาดไว้ ในกรณีนี้ Asserts เหมาะอย่างยิ่ง