อะไรคือปัจจัยสำคัญในการเลือก Mocking Framework?


15

ฉันต้องการเริ่มต้นกับวัตถุในการทดสอบหน่วยของฉัน ดูเหมือนว่ามีกรอบการเยาะเย้ยที่ดีมากมาย

  1. กรอบงานที่แตกต่างกันมีกลุ่มเป้าหมายแตกต่างกันหรือไม่?
  2. ฉันควรพิจารณาปัจจัยใดบ้างเมื่อเลือกกรอบงานที่เหมาะกับสถานการณ์ของฉัน

ฉันทำงานในสภาพแวดล้อม. Net แต่ฉันตั้งใจจะใช้คำถามกับกรอบการเยาะเย้ยโดยทั่วไป
epotter

คำตอบ:


14

กรอบงานที่แตกต่างกันมีกลุ่มเป้าหมายแตกต่างกันหรือไม่?

ใช่. กรอบบางอย่างเช่น Microsoft Moles , TypeMock IsolatorและJustMockช่วยให้คุณสามารถเยาะเย้ยอะไรก็ได้ เครื่องมือการเยาะเย้ยเหล่านี้โดยทั่วไปจะดีกว่าสำหรับนักพัฒนาที่ต้องการใช้พวกเขาในรหัสเดิมที่มีอยู่เนื่องจากมันอาจเป็นไปไม่ได้ที่จะปรับโครงสร้างเช่นในการออกแบบที่สามารถทดสอบได้มากขึ้น *

ตามเนื้อผ้าการออกแบบการทดสอบหมายความว่า codebase จำเป็นต้องใช้อินเทอร์เฟซคลาสนามธรรมวิธีเสมือนคลาสที่เปิดผนึก ฯลฯ ดังนั้นกรอบการเยาะเย้ยแบบดั้งเดิมเช่นMoqและRhinoMocksทำงานได้ดีกับรหัสที่พัฒนาโดยใช้การทดสอบขับเคลื่อนการพัฒนาพึ่งพาและ แนวคิดดังกล่าวอื่น ๆ โดยวิธีการฉันขอแนะนำให้ใช้พึ่งพาการฉีดในขณะที่คุณได้รับมากกว่ารหัสที่ทดสอบได้ แต่รหัสบำรุงรักษามากขึ้นเช่นกัน

ฉันควรพิจารณาปัจจัยใดบ้างเมื่อเลือกกรอบงานที่เหมาะกับสถานการณ์ของฉัน

  • กิจกรรมพัฒนา เครื่องมืออย่าง Moq และ RhinoMocks นั้นใช้งานได้ดีและได้รับความนิยมและทันสมัยอยู่เสมอ
  • เทียบกับโอเพ่นซอร์ส เชิงพาณิชย์ พิจารณาข้อดีข้อเสียต่าง ๆ โดยทั่วไปสำหรับการเปรียบเทียบนี้ ค่าใช้จ่ายการสนับสนุน ฯลฯ ...
  • วุฒิภาวะ เครื่องมือใหม่เป็นอย่างไร มันอยู่ในรุ่นเบต้า (เช่น Microsoft Moles) หรือมีรุ่นที่เสถียรหลายรุ่นหรือไม่? ตัวอย่างเช่นฉันชอบไฝสำหรับรหัสดั้งเดิม แต่มีข้อบกพร่องหลายอย่างที่ต้องแก้ไขในนั้นและจะต้องรอก่อนที่จะได้รับการแก้ไข (รุ่นถัดไป พ.ย. 2011)
  • เอกสาร มีหนังสือและบล็อกหลายเล่มที่ครอบคลุมการทดสอบหน่วยการเยาะเย้ยการเยาะเย้ยอัตโนมัติและอื่น ๆ นอกจากนี้เอกสารของตัวเองดีแค่ไหน?
  • วากยสัมพันธ์ เครื่องมือแต่ละอย่างมีวิธีการพูดเหมือนกัน ดูว่าแบบไหนดีกว่าสำหรับคุณ
  • ความเร็ว เครื่องมือที่ใช้การทำโปรไฟล์ CLR (TypeMock, Moles, JustMock) อาจช้ากว่าเครื่องมือแบบดั้งเดิม (Moq, RhinoMocks) มาก การลงโทษด้วยความเร็วนี้อาจเป็นปัญหาเนื่องจากคุณทำการทดสอบหลายครั้ง กฎง่ายๆคือถ้าการทดสอบใช้เวลานานกว่า 1/10 วินาทีมันช้าเกินไป
  • ชุมชนการสนับสนุน นักพัฒนาซอฟต์แวร์คนอื่น ๆ เขียนเครื่องมืออื่น ๆ ที่ขยาย (หรือทำงานในคำชม) ไปยังเครื่องมือจำลองหรือไม่ มีโครงการMoq.Contribที่เพิ่มความสามารถในการเยาะเย้ยอัตโนมัติเพื่อ Moq (ซึ่งจะช่วยเพิ่มความเร็วในการเขียนทดสอบเวลา) ดีกว่ายังมีAutoFixture , AutoFixture.AutoMoq, AutoFixture.AutoRhinoMocks ซึ่งยังอนุญาตให้มีการเยาะเย้ยโดยอัตโนมัติรวมถึงการสร้างตัวแปรนิรนาม

* ดูการทำงานอย่างมีประสิทธิภาพด้วย Legacy Codeสำหรับวิธีการค่อย ๆ refactor code โดยไม่ต้องทดสอบเป็นโค้ดที่สามารถใช้กับเครื่องมือทดสอบแบบดั้งเดิม (และการเยาะเย้ย)


2

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


2
  1. สะดวกในการใช้. เฟรมเวิร์กบางตัวมีสำนวนการใช้งานขั้นสูงมากขึ้น ตัวอย่างเช่น MOQอนุญาตให้ใช้ lambdas เพื่อเข้ารหัสความคาดหวัง ห้องสมุดที่เก่ากว่าบางแห่งไม่สนับสนุนสิ่งนี้
  2. ความเร็ว. การทดสอบแต่ละหน่วยควรรวดเร็วเพื่อให้ห้องสมุดทั้งหมดของคุณใช้เวลาไม่นานในการรัน กรอบการเยาะเย้ยบางอย่างมีการสร้างแบบจำลอง mocks ซึ่งเป็นไปอย่างรวดเร็ว เฟรมเวิร์กอื่นสร้างโค้ดแบบไดนามิกที่รันไทม์ซึ่งช้ากว่า
  3. สนับสนุน. คุณต้องการเฟรมเวิร์กที่ได้รับการสนับสนุนอย่างแข็งขันพร้อมกับการแก้ไขและอัปเดตเพื่อรองรับ. NET เวอร์ชั่นใหม่เนื่องจากมีการเผยแพร่
  4. อำนาจ กรอบการเยาะเย้ยส่วนใหญ่ที่ฉันได้ทำการวิจัยมีความเหมือนกันในแง่ของพลัง มีข้อยกเว้นหนึ่งที่น่าสังเกตคือ Microsoft Molesช่วยให้การเยาะเย้ยของ "วิธีการที่ไม่ใช่เสมือน / คงที่ในประเภทที่ปิดผนึก" นี่คือสิ่งที่ไม่มีกรอบการเยาะเย้ยอื่นสนับสนุนความรู้ของฉัน

ในทีมของฉันเราเลือกMicrosoft ไฝ มันชนะอย่างมีนัยสำคัญใน # 2, # 3 และ # 4 แม้ว่ามันจะเป็นสำนวนที่น้อยกว่าทางเลือกส่วนใหญ่และอยู่ต่ำสุดใน # 1


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