มีจุดประสงค์เพื่อVerifiable()อะไร?
หากฉันตรวจสอบMockและปล่อยให้สิ่งนี้ยังคงยืนยันไฟล์SetUp.
แก้ไข:ฉันใช้VerifyAll()เหตุผลในการตรวจสอบทุกอย่าง หลังจากเปลี่ยนเป็นVerify()เฉพาะของฉัน.Verifiable() SetUpถูกตรวจสอบ
มีจุดประสงค์เพื่อVerifiable()อะไร?
หากฉันตรวจสอบMockและปล่อยให้สิ่งนี้ยังคงยืนยันไฟล์SetUp.
แก้ไข:ฉันใช้VerifyAll()เหตุผลในการตรวจสอบทุกอย่าง หลังจากเปลี่ยนเป็นVerify()เฉพาะของฉัน.Verifiable() SetUpถูกตรวจสอบ
คำตอบ:
ภาคผนวก: ในฐานะที่เป็นรัฐคำตอบอื่น ๆ วัตถุประสงค์ของการ.Verifiableคือการขอความช่วยเหลือSetupเข้ามาในชุดของ "รอการตัดบัญชีVerify(...)โทร" mock.Verify()ซึ่งจากนั้นจะสามารถเรียกผ่าน
คำชี้แจงของ OP ทำให้ชัดเจนว่านี่คือเป้าหมายและปัญหาเดียวคือการหาสาเหตุว่าทำไมจึงไม่ทำงาน แต่เนื่องจาก @Liam ได้ตรวจสอบคำตอบก็ควรสัมผัสกับสิ่งนี้เช่นกัน: -กรณีการใช้งานที่สำคัญเท่าที่จะทำได้ ดูคือ:
mock.Setup()และmock.VerifyVerifyโทรจริง(เช่นคุณสามารถตั้งค่าด้วยวิธีการช่วยเหลืออื่น)... และกลับไปที่คำตอบของฉันซึ่งพูดอย่างมีประสิทธิภาพโดยสรุปว่า "ระวังให้ดีเนื่องจากผู้เชี่ยวชาญข้างต้นมักถูกพิจารณาว่าเกินดุลจากผลกระทบที่ว่าการบรรลุเป้าหมายเหล่านั้นมีต่อความชัดเจนและความสามารถในการบำรุงรักษาของการทดสอบซึ่งอิงกับโครงสร้างดังกล่าวมากเกินไป"
ORIGINAL: โปรดทราบว่าหากเป็นไปได้ควรทำตามเค้าโครงAAAแทนและด้วยเหตุนี้ควรทำการmock.Verify( expression )โทรอย่างชัดเจนหลังจากทำงานเสร็จแล้วแทนที่จะmock.Setup( ... ).Verifiable()จับคู่กับ a mock.Verify()หรือmock.VerifyAll()ทุกที่ที่เป็นไปได้ (credit: @kzu )
Verifyable()/ VerifyAll()ในทุกกรณี การทดสอบหน่วยปัจจุบันของฉันมีการSetup(...)โทรจำนวนมาก(> 30) สามารถจับคู่แต่ละรายการกับ Verify () ที่เท่ากันเพื่อให้เป็นไปตามแบบแผน แต่ทำให้เกิดการทำซ้ำรหัสจำนวนมากและจะยากกว่าในการดูแลรักษาและอ่านเมื่อจำนวนการทดสอบหน่วยเพิ่มขึ้น ฉันเดาว่าสิ่งที่ฉันถามจริงๆคือสามารถมีข้อยกเว้นได้หากมีการตั้งค่าจำนวนมากหรือเป็นการหลีกเลี่ยงVerifiable()กฎที่ยากและรวดเร็ว?
Setupและ a Verifyที่อาจพลาดการชนะที่สูงกว่าทำได้เพียงแค่ผ่อนคลายข้อ จำกัด DRY ในลักษณะที่แนะนำโดย AAA และกลุ่มกลยุทธ์ที่มีนัยอย่างมาก
เมื่อVerify()วิธีการที่เรียกว่าในตอนท้ายของการทดสอบในกรณีใด ๆ thrownของความคาดหวังที่มีเครื่องหมายเป็นที่ตรวจสอบไม่ได้รับการเรียกแล้วยกเว้น
VerifyAll() ไม่ตรวจสอบความคาดหวังที่ตรวจสอบได้