ฉันต้องการเริ่มต้นกับวัตถุในการทดสอบหน่วยของฉัน ดูเหมือนว่ามีกรอบการเยาะเย้ยที่ดีมากมาย
- กรอบงานที่แตกต่างกันมีกลุ่มเป้าหมายแตกต่างกันหรือไม่?
- ฉันควรพิจารณาปัจจัยใดบ้างเมื่อเลือกกรอบงานที่เหมาะกับสถานการณ์ของฉัน
ฉันต้องการเริ่มต้นกับวัตถุในการทดสอบหน่วยของฉัน ดูเหมือนว่ามีกรอบการเยาะเย้ยที่ดีมากมาย
คำตอบ:
ใช่. กรอบบางอย่างเช่น Microsoft Moles , TypeMock IsolatorและJustMockช่วยให้คุณสามารถเยาะเย้ยอะไรก็ได้ เครื่องมือการเยาะเย้ยเหล่านี้โดยทั่วไปจะดีกว่าสำหรับนักพัฒนาที่ต้องการใช้พวกเขาในรหัสเดิมที่มีอยู่เนื่องจากมันอาจเป็นไปไม่ได้ที่จะปรับโครงสร้างเช่นในการออกแบบที่สามารถทดสอบได้มากขึ้น *
ตามเนื้อผ้าการออกแบบการทดสอบหมายความว่า codebase จำเป็นต้องใช้อินเทอร์เฟซคลาสนามธรรมวิธีเสมือนคลาสที่เปิดผนึก ฯลฯ ดังนั้นกรอบการเยาะเย้ยแบบดั้งเดิมเช่นMoqและRhinoMocksทำงานได้ดีกับรหัสที่พัฒนาโดยใช้การทดสอบขับเคลื่อนการพัฒนาพึ่งพาและ แนวคิดดังกล่าวอื่น ๆ โดยวิธีการฉันขอแนะนำให้ใช้พึ่งพาการฉีดในขณะที่คุณได้รับมากกว่ารหัสที่ทดสอบได้ แต่รหัสบำรุงรักษามากขึ้นเช่นกัน
* ดูการทำงานอย่างมีประสิทธิภาพด้วย Legacy Codeสำหรับวิธีการค่อย ๆ refactor code โดยไม่ต้องทดสอบเป็นโค้ดที่สามารถใช้กับเครื่องมือทดสอบแบบดั้งเดิม (และการเยาะเย้ย)
Moq กวดวิชามีส่วนบนพื้นหลังปรัชญาและความขัดแย้งที่เหมาะสมในการเริ่มต้นที่กล่าวถึงในส่วนที่เกี่ยวกับเครื่องมือเฉพาะไม่กี่: TypeMock Isolator, RhinoMocks และขั้นต่ำ มันเขียนขึ้นเพื่ออธิบาย Moq ดังนั้นจึงค่อนข้างเบ้ แต่ฉันคิดว่ามันมีประโยชน์มากสำหรับฉันเมื่อพยายามเข้าใจความแตกต่างบางอย่างในกรอบการเยาะเย้ย
ฉันพบการตอบสนองต่อเธรด SO นี้ใน C # Mocking Frameworksก็มีประโยชน์เช่นกัน ส่วนใหญ่อ้างถึงกรอบการเยาะเย้ยหนึ่งที่ผู้ใช้พบว่ามีประโยชน์จริง ๆ แต่มีการตอบสนองจาก HaraldVวิธีลงที่กล่าวถึง mocks ตามพร็อกซีและ mocks profiler ตาม
ฉันก็สามารถที่จะหากราฟเปรียบเทียบออนไลน์ โปรดทราบว่ามันมาจากปี 2009 ดังนั้นฉันไม่แน่ใจว่ามันเป็นข้อมูลล่าสุด มีความคิดเห็นอย่างน้อยหนึ่งรายการที่ระบุว่าข้อมูลเกี่ยวกับ TypeMock และการเรียกกลับเป็นข้อมูลที่ล้าสมัย แต่แผนภูมิอาจดีสำหรับการเพิ่มปัญหาที่ต้องพิจารณาแม้ว่าคุณจะต้องทำ legwork เพื่อดูสถานะปัจจุบัน: RhinoMocks, Moq, NMock, และแผนภูมิเปรียบเทียบ TypeMock
มีโครงการใน Google Code ที่มีกรณีทดสอบในกรอบการเยาะเย้ยหลายเฟรมสำหรับการเปรียบเทียบโค้ดง่าย ๆ : mocking-frameworks-compar
ในทีมของฉันเราเลือกMicrosoft ไฝ มันชนะอย่างมีนัยสำคัญใน # 2, # 3 และ # 4 แม้ว่ามันจะเป็นสำนวนที่น้อยกว่าทางเลือกส่วนใหญ่และอยู่ต่ำสุดใน # 1