มีจุดประสงค์เพื่อVerifiable()
อะไร?
หากฉันตรวจสอบMock
และปล่อยให้สิ่งนี้ยังคงยืนยันไฟล์SetUp
.
แก้ไข:ฉันใช้VerifyAll()
เหตุผลในการตรวจสอบทุกอย่าง หลังจากเปลี่ยนเป็นVerify()
เฉพาะของฉัน.Verifiable()
SetUp
ถูกตรวจสอบ
มีจุดประสงค์เพื่อVerifiable()
อะไร?
หากฉันตรวจสอบMock
และปล่อยให้สิ่งนี้ยังคงยืนยันไฟล์SetUp
.
แก้ไข:ฉันใช้VerifyAll()
เหตุผลในการตรวจสอบทุกอย่าง หลังจากเปลี่ยนเป็นVerify()
เฉพาะของฉัน.Verifiable()
SetUp
ถูกตรวจสอบ
คำตอบ:
ภาคผนวก: ในฐานะที่เป็นรัฐคำตอบอื่น ๆ วัตถุประสงค์ของการ.Verifiable
คือการขอความช่วยเหลือSetup
เข้ามาในชุดของ "รอการตัดบัญชีVerify(...)
โทร" mock.Verify()
ซึ่งจากนั้นจะสามารถเรียกผ่าน
คำชี้แจงของ OP ทำให้ชัดเจนว่านี่คือเป้าหมายและปัญหาเดียวคือการหาสาเหตุว่าทำไมจึงไม่ทำงาน แต่เนื่องจาก @Liam ได้ตรวจสอบคำตอบก็ควรสัมผัสกับสิ่งนี้เช่นกัน: -กรณีการใช้งานที่สำคัญเท่าที่จะทำได้ ดูคือ:
mock.Setup()
และmock.Verify
Verify
โทรจริง(เช่นคุณสามารถตั้งค่าด้วยวิธีการช่วยเหลืออื่น)... และกลับไปที่คำตอบของฉันซึ่งพูดอย่างมีประสิทธิภาพโดยสรุปว่า "ระวังให้ดีเนื่องจากผู้เชี่ยวชาญข้างต้นมักถูกพิจารณาว่าเกินดุลจากผลกระทบที่ว่าการบรรลุเป้าหมายเหล่านั้นมีต่อความชัดเจนและความสามารถในการบำรุงรักษาของการทดสอบซึ่งอิงกับโครงสร้างดังกล่าวมากเกินไป"
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()
ไม่ตรวจสอบความคาดหวังที่ตรวจสอบได้