คำถามติดแท็ก assert

การยืนยันคือคำสั่งซึ่งจะยกเลิกโปรแกรมเมื่อประเมินว่าเป็นเท็จ โดยทั่วไป Assert จะใช้สำหรับการดีบักและสถานการณ์ที่ไม่ควรเกิดขึ้น

17
เมื่อใดที่ควรมีการยืนยันในรหัสการผลิต [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 เดือนที่ผ่านมา ปรับปรุงคำถามนี้ มีการอภิปรายที่เกิดขึ้นที่ comp.lang.c ++ มีการตรวจสอบว่ายืนยันหรือไม่ซึ่งใน C ++ นั้นมีอยู่เฉพาะในการสร้างข้อบกพร่องโดยค่าเริ่มต้นควรเก็บไว้ในรหัสการผลิตหรือไม่ เห็นได้ชัดว่าแต่ละโครงการจะไม่ซ้ำกันดังนั้นคำถามของฉันที่นี่คือไม่มากไม่ว่าจะยืนยันควรจะเก็บไว้, แต่ในกรณีนี้เป็นฝากฝัง / ไม่ได้เป็นความคิดที่ดี โดยการยืนยันฉันหมายถึง: การตรวจสอบรันไทม์ที่ทดสอบเงื่อนไขซึ่งเมื่อเท็จแสดงให้เห็นข้อบกพร่องในซอฟต์แวร์ กลไกที่โปรแกรมหยุดการทำงาน (อาจเกิดขึ้นหลังจากทำความสะอาดน้อยที่สุด) ฉันไม่จำเป็นต้องพูดถึง C หรือ C ++ ความคิดเห็นของฉันเองก็คือถ้าคุณเป็นโปรแกรมเมอร์ แต่ไม่ได้เป็นเจ้าของข้อมูล (ซึ่งเป็นกรณีของแอปพลิเคชันเดสก์ท็อปเชิงพาณิชย์ส่วนใหญ่) คุณควรจะเก็บไว้เพราะการยืนยันที่ล้มเหลวแสดงข้อผิดพลาดและคุณไม่ควรไป เปิดด้วยจุดบกพร่องพร้อมความเสี่ยงของการทำลายข้อมูลของผู้ใช้ วิธีนี้บังคับให้คุณทดสอบอย่างมากก่อนที่จะส่งและทำให้มองเห็นข้อบกพร่องได้ง่ายขึ้นจึงง่ายต่อการตรวจจับและแก้ไข ความเห็น / ประสบการณ์ของคุณคืออะไร ไชโย คาร์ล ดูคำถามที่เกี่ยวข้องที่นี่ การตอบสนองและการปรับปรุง เฮ้เกรแฮม การยืนยันเป็นข้อผิดพลาดบริสุทธิ์และเรียบง่ายดังนั้นควรจัดการเหมือน เนื่องจากข้อผิดพลาดควรได้รับการจัดการในโหมดการปล่อยดังนั้นคุณไม่จำเป็นต้องยืนยัน นั่นเป็นเหตุผลที่ฉันชอบคำว่า "บั๊ก" เมื่อพูดถึงการยืนยัน มันทำให้สิ่งต่าง ๆ ชัดเจนขึ้น …
166 assert 

9
C # - วิธีการยืนยัน () ทำอะไรได้บ้าง มันยังมีประโยชน์หรือไม่
ฉันกำลังดีบั๊กด้วยจุดพักและฉันตระหนักถึงการเรียกร้องยืนยันหรือไม่ ฉันคิดว่ามันเป็นเพียงสำหรับการทดสอบหน่วย มันทำอะไรได้มากกว่าเบรกพอยต์? เนื่องจากฉันสามารถเบรกพอยต์ทำไมฉันจึงควรใช้ Assert
156 c#  assert 

5
ใช้วิธีการ NUnit Assert.Throws หรือแอตทริบิวต์ ExpectedException หรือไม่
ฉันได้ค้นพบว่าสิ่งเหล่านี้ดูเหมือนจะเป็นสองวิธีหลักในการทดสอบข้อยกเว้น: Assert.Throws<Exception>(()=>MethodThatThrows()); [ExpectedException(typeof(Exception))] ข้อใดจะดีที่สุด ข้อเสนอหนึ่งมีข้อได้เปรียบเหนือสิ่งอื่นหรือไม่? หรือมันเป็นเพียงเรื่องของการตั้งค่าส่วนตัว?


15
PHPUnit: ยืนยันว่าอาร์เรย์สองอาร์เรย์เท่ากัน แต่ลำดับขององค์ประกอบไม่สำคัญ
อะไรคือวิธีที่ดีในการยืนยันว่าอาร์เรย์ของออบเจ็กต์สองอาร์เรย์เท่ากันเมื่อลำดับขององค์ประกอบในอาร์เรย์ไม่สำคัญหรือแม้กระทั่งอาจมีการเปลี่ยนแปลง

7
เพิ่มข้อความที่กำหนดเองในการยืนยัน?
มีวิธีเพิ่มหรือแก้ไขข้อความที่ส่งโดยการยืนยันหรือไม่? ฉันต้องการใช้สิ่งที่ต้องการ assert(a == b, "A must be equal to B"); แล้วคอมไพเลอร์เพิ่มบรรทัด , เวลาและอื่น ๆ ... เป็นไปได้ไหม?
129 c++  assert 

14
ออกแบบตามสัญญาโดยใช้คำยืนยันหรือข้อยกเว้น? [ปิด]
ปิด . คำถามนี้เป็นคำถามความคิดเห็นตาม ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบได้ด้วยข้อเท็จจริงและการอ้างอิงโดยแก้ไขโพสต์นี้ ปิดให้บริการใน2 ปีที่ผ่านมา ปรับปรุงคำถามนี้ เมื่อเขียนโปรแกรมตามสัญญาฟังก์ชั่นหรือวิธีการก่อนอื่นให้ตรวจสอบว่ามีการปฏิบัติตามเงื่อนไขเบื้องต้นหรือไม่ก่อนที่จะเริ่มทำงานในความรับผิดชอบใช่ไหม? ทั้งสองมากที่สุดวิธีการประสบความสำเร็จในการทำตรวจสอบเหล่านี้โดยและassertexception ยืนยันล้มเหลวในโหมดดีบักเท่านั้น เพื่อให้แน่ใจว่าจำเป็นอย่างยิ่งที่จะต้อง (หน่วย) ทดสอบเงื่อนไขเบื้องต้นของสัญญาที่แยกจากกันทั้งหมดเพื่อดูว่าล้มเหลวจริงหรือไม่ ข้อยกเว้นล้มเหลวในโหมดดีบักและรีลีส สิ่งนี้มีประโยชน์ที่พฤติกรรมการดีบักที่ทดสอบจะเหมือนกับพฤติกรรมการรีลีส แต่จะมีโทษประสิทธิภาพของรันไทม์ คุณคิดว่าอันไหนดีกว่ากัน? ดูคำถามที่เกี่ยวข้องที่นี่

8
static_assert ทำอะไรและคุณจะใช้เพื่ออะไร
คุณช่วยยกตัวอย่างได้ไหมว่าstatic_assert(...)('C ++ 11') จะแก้ปัญหาได้อย่างสวยงาม? assert(...)ผมคุ้นเคยกับเวลาทำงาน เมื่อไหร่ที่ฉันควรชอบstatic_assert(...)มากกว่าปกติassert(...)? นอกจากนี้ในboostนั้นมีสิ่งที่เรียกว่าBOOST_STATIC_ASSERTมันเหมือนกับstatic_assert(...)?

5
หลามยืนยันโดยมีและไม่มีวงเล็บ
ต่อไปนี้คือคำเรียกร้องง่ายๆสี่ข้อของการยืนยัน: >>> assert 1==2 Traceback (most recent call last): File "<stdin>", line 1, in ? AssertionError >>> assert 1==2, "hi" Traceback (most recent call last): File "<stdin>", line 1, in ? AssertionError: hi >>> assert(1==2) Traceback (most recent call last): File "<stdin>", line 1, in ? AssertionError >>> assert(1==2, "hi") …


5
การใช้ assert () ในการปฏิบัติที่ไม่ดีของ C ++ หรือไม่?
ฉันมักจะเพิ่มการยืนยันจำนวนมากให้กับโค้ด C ++ ของฉันเพื่อให้การดีบักง่ายขึ้นโดยไม่ส่งผลกระทบต่อประสิทธิภาพของการสร้างรุ่น ตอนนี้assertเป็นมาโคร C บริสุทธิ์ที่ออกแบบโดยไม่คำนึงถึงกลไก C ++ ในทางกลับกัน C ++ กำหนดstd::logic_errorซึ่งหมายถึงการโยนในกรณีที่มีข้อผิดพลาดในตรรกะของโปรแกรม (ดังนั้นชื่อ) การโยนอินสแตนซ์อาจเป็นทางเลือกที่สมบูรณ์แบบของ C ++ assertมากกว่า ปัญหาคือassertและabortทั้งสองยุติโปรแกรมทันทีโดยไม่ต้องเรียกผู้ทำลายดังนั้นการข้ามการล้างข้อมูลในขณะที่การทิ้งข้อยกเว้นด้วยตนเองจะเพิ่มต้นทุนรันไทม์โดยไม่จำเป็น วิธีหนึ่งในการแก้ปัญหานี้คือการสร้างมาโครการยืนยันของตัวเองSAFE_ASSERTซึ่งใช้งานได้เหมือนกับคู่ C แต่จะมีข้อยกเว้นสำหรับความล้มเหลว ฉันนึกถึงความคิดเห็นสามประการเกี่ยวกับปัญหานี้: ยึดมั่นในการยืนยันของ C เนื่องจากโปรแกรมถูกยกเลิกทันทีจึงไม่สำคัญว่าการเปลี่ยนแปลงจะถูกยกเลิกอย่างถูกต้องหรือไม่ นอกจากนี้การใช้#defines ใน C ++ ก็แย่พอ ๆ กัน โยนข้อยกเว้นและจับมันใน main () การอนุญาตให้รหัสข้ามตัวทำลายในสถานะใด ๆ ของโปรแกรมถือเป็นการปฏิบัติที่ไม่ดีและต้องหลีกเลี่ยงค่าใช้จ่ายทั้งหมดดังนั้นจึงมีการเรียกร้องให้ยุติ () หากมีการโยนข้อยกเว้นจะต้องถูกจับ ทิ้งข้อยกเว้นและให้มันยุติโปรแกรม ข้อยกเว้นในการยุติโปรแกรมนั้นไม่เป็นไรและเนื่องจากNDEBUGสิ่งนี้จะไม่เกิดขึ้นในรุ่นสร้าง การจับเป็นสิ่งที่ไม่จำเป็นและเปิดเผยรายละเอียดการนำโค้ดภายในไปmain()ใช้ มีคำตอบที่ชัดเจนสำหรับปัญหานี้หรือไม่? อ้างอิงมืออาชีพใด ๆ ? แก้ไข:แน่นอนว่าการข้ามผู้ทำลายล้างคือพฤติกรรมที่ไม่ได้กำหนด

6
ปิดใช้งานการยืนยันใน Python
Наэтотвопросестьответына กองมากเกินнарусском : Естьливозможностьотключитьยืนยัน? ฉันจะปิดใช้งานการยืนยันใน Python ได้อย่างไร นั่นคือถ้าการยืนยันล้มเหลวฉันไม่ต้องการให้มันโยนAssertionErrorแต่จะทำต่อไป ฉันจะทำอย่างไร?

9
ฉันสามารถใช้การยืนยันบนอุปกรณ์ Android ได้หรือไม่
ฉันต้องการใช้คีย์เวิร์ดAssertในแอพ Android ของฉันเพื่อทำลายแอพของฉันในบางกรณีบนโปรแกรมจำลองหรืออุปกรณ์ของฉันในระหว่างการทดสอบ เป็นไปได้หรือไม่ ดูเหมือนว่าโปรแกรมจำลองจะไม่สนใจคำยืนยันของฉัน
88 android  assert 

12
คงยืนยันใน C
วิธีใดที่ดีที่สุดในการบรรลุการยืนยันแบบคงที่ของเวลาคอมไพล์ใน C (ไม่ใช่ C ++) โดยเน้นเฉพาะ GCC

8
ฉันควรใช้การยืนยันรหัส PHP ของฉันหรือไม่
เพื่อนร่วมงานได้เพิ่มคำสั่งassertสองสามครั้งภายในไลบรารีของเราในสถานที่ที่ฉันจะใช้คำสั่ง if และทิ้งข้อยกเว้น (ฉันไม่เคยได้ยินเรื่องการยืนยันมาก่อนเลย) นี่คือตัวอย่างของวิธีที่เขาใช้: assert('isset($this->records); /* Records must be set before this is called. */'); ฉันจะทำ: if (!isset($this->records)) { throw new Exception('Records must be set before this is called'); } จากการอ่านเอกสาร PHP ในการยืนยันดูเหมือนว่าขอแนะนำให้คุณตรวจสอบให้แน่ใจว่ามีการใช้งานอยู่และเพิ่มตัวจัดการก่อนที่จะใช้การยืนยัน ฉันไม่พบสถานที่ที่เขาทำแบบนี้ ดังนั้นคำถามของฉันคือใช้การยืนยันความคิดที่ดีที่ได้รับข้างต้นและฉันควรใช้บ่อยขึ้นแทนที่จะใช้ if's และข้อยกเว้นหรือไม่? หมายเหตุอีกประการหนึ่งเรากำลังวางแผนที่จะใช้ไลบรารีเหล่านี้ในโครงการและเซิร์ฟเวอร์ต่างๆรวมถึงโครงการที่เราอาจไม่ได้เป็นส่วนหนึ่งของ (ไลบรารีเป็นโอเพ่นซอร์ส) สิ่งนี้สร้างความแตกต่างในการใช้การยืนยันหรือไม่?
87 php  assert 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.