ห้องสมุดล้อเลียนที่ได้รับความนิยมและเป็นมิตรที่สุดสำหรับ. NET
var mock = mock ใหม่ <Ilovethislibrary> (); // ว้าว! ไม่มีบันทึก/เล่นซ้ำความแปลก! - mock.setup (Library => Library.downloadexists ("2.0.0.0")). returns (จริง); // ใช้คุณสมบัติวัตถุในการเยาะเย้ยเพื่อรับการอ้างอิงไปยังวัตถุ // การใช้ ILOVETHISLIBRARY แล้วออกกำลังกายโดยโทร // วิธีการเกี่ยวกับมัน ilovethislibrary lovable = mock.Object; bool download = lovable.downloadexists ("2.0.0.0"); // ตรวจสอบว่าวิธีที่กำหนดนั้นถูกเรียกด้วยค่าที่คาดหวังมากที่สุดครั้งเดียว Mock.Verify (Library => Library.DownLoadexists ("2.0.0.0"), times.atonce ());
MOQ ยังเป็นห้องสมุดแห่งแรกและแห่งเดียวที่จะให้ LINQ ถึงการเยาะเย้ยเพื่อให้พฤติกรรมเดียวกันข้างต้นสามารถทำได้อย่างรัดกุมมากขึ้น:
ilovethislibrary lovable = mock.of <ilovethislibrary> (l => l.downloadexists ("2.0.0.0") == true); // ออกกำลังกายอินสแตนซ์ที่ส่งคืนโดย mock.of โดยการเรียกวิธีการบน ... bool download = lovable.downloadexists ("2.0.0.0"); // เพียงยืนยันสถานะที่ส่งคืน: assert.true (ดาวน์โหลด); // ถ้าคุณต้องการไปไกลกว่าการทดสอบของรัฐและต้องการ // ตรวจสอบการโต้ตอบจำลองแทน ... mock.get (น่ารัก) .Verify (Library => Library.downloadexists ("2.0.0.0"));
คุณสามารถนึกถึง LINQ เพื่อเยาะเย้ยว่า "จากจักรวาลแห่งการเยาะเย้ยให้ฉันเป็นคนที่พฤติกรรมตรงกับนิพจน์นี้"
ลองดูตัวอย่างเพิ่มเติมสำหรับตัวอย่างเพิ่มเติม!
moq (ออกเสียงว่า "จำลอง-you" หรือเพียงแค่ "เยาะเย้ย") เป็นห้องสมุดเยาะเย้ยเพียงแห่งเดียวสำหรับ. NET ที่พัฒนาขึ้นจากศูนย์เพื่อใช้ประโยชน์อย่างเต็มที่จาก. NET LINQ Expression Trees และ Expressions Lambda มีห้องสมุดเยาะเย้ยที่เป็นมิตรกับ Refactoring และรองรับการเยาะเย้ยอินเทอร์เฟซเช่นเดียวกับคลาส API นั้นง่ายมากและตรงไปตรงมาและไม่ต้องการความรู้หรือประสบการณ์ใด ๆ กับแนวคิดที่เยาะเย้ย
ห้องสมุดถูกสร้างขึ้นเป็นหลักสำหรับนักพัฒนาที่ไม่ได้ใช้ห้องสมุดเยาะเย้ยใด ๆ (หรือไม่พอใจกับความซับซ้อนของการใช้งานอื่น ๆ ) และโดยทั่วไปมักจะเขียน mocks ของตัวเองด้วยตนเอง (มี "fanciness" มากหรือน้อย) นักพัฒนาส่วนใหญ่ในสถานการณ์นี้ก็ค่อนข้างปฏิบัติและปฏิบัติตามรัฐ (หรือคลาสสิก) TDD มันเป็นผลมาจากความรู้สึกว่าอุปสรรคของการเข้ามาจากห้องสมุดเยาะเย้ยอื่น ๆ นั้นค่อนข้างสูงและเป็นวิธีที่ง่ายกว่าและมีน้ำหนักเบามากขึ้นเป็นไปได้ MOQ ประสบความสำเร็จทั้งหมดนี้ด้วยการใช้ประโยชน์อย่างเต็มที่จากคุณสมบัติภาษา C# และ VB ขนาดกะทัดรัดและขนาดกะทัดรัดที่รู้จักกันในชื่อ LINQ (ไม่ได้มีไว้สำหรับการสืบค้นเท่านั้น
MOQ ได้รับการออกแบบให้เป็นวิธีที่ใช้งานได้จริงไม่สร้างความรำคาญและตรงไปตรงมาในการตั้งค่าการพึ่งพาการทดสอบของคุณอย่างรวดเร็ว การออกแบบ API ช่วยให้ผู้ใช้มือใหม่ตกอยู่ใน "หลุมแห่งความสำเร็จ" และหลีกเลี่ยงการใช้ผิดพลาด/การทารุณกรรมที่พบบ่อยที่สุด
เมื่อมันถูกคิดว่ามันเป็นห้องสมุดเยาะเย้ยเพียงแห่งเดียวที่ต่อต้านวิธีการบันทึกทั่วไปและไม่เข้าใจ (โดยเฉพาะอย่างยิ่งสำหรับสามเณร) วิธีการบันทึก/เล่นซ้ำจากห้องสมุดอื่น ๆ ทั้งหมด (และนั่นอาจเป็นสิ่งที่ดี;))
การไม่ใช้เร็กคอร์ด/เล่นซ้ำหมายความว่ามันตรงไปตรงมาเพื่อย้ายความคาดหวังทั่วไปไปยังวิธีการตั้งค่าการติดตั้งและแม้แต่แทนที่ความคาดหวังเหล่านั้นเมื่อจำเป็นในการทดสอบหน่วยเฉพาะ
คุณสามารถอ่านเพิ่มเติมเกี่ยวกับ "ทำไม" และดูภาพหน้าจอที่ดีที่บล็อกของ KZU
ดูตัวอย่าง QuickStart ของเราเพื่อรับความรู้สึกของ API ที่เรียบง่ายมากและติดตั้งจาก NuGet
อ่านเกี่ยวกับการประกาศที่บล็อกของ KZU รับพื้นหลังเกี่ยวกับสถานะของห้องสมุดจำลองจาก Scott Hanselman
MOQ ได้รับการพัฒนาโดย Clarius, Manas และ Instedd
Moq ใช้ Castle Dynamicproxy ภายในเป็นกลไกการสกัดกั้นเพื่อเปิดใช้งานการเยาะเย้ย
MOQ เสนอคุณสมบัติต่อไปนี้:
Strong-typed: ไม่มีสตริงสำหรับความคาดหวังไม่มีค่าส่งคืนหรือข้อ จำกัด
การรวม VS IntelliSense ที่ไม่มีใครเทียบ: ทุกอย่างรองรับ Full Vs IntelliSense จากการตั้งค่าความคาดหวังไปจนถึงการระบุข้อโต้แย้งการโทรวิธีการกลับค่า ฯลฯ ฯลฯ
ไม่มีการบันทึก/เล่นซ้ำสำนวนที่จะเรียนรู้ เพียงสร้างการเยาะเย้ยของคุณตั้งค่าใช้งานและตรวจสอบการโทรไปยังมัน (คุณไม่สามารถตรวจสอบการเยาะเย้ยได้เมื่อทำหน้าที่เป็นต้นขั้วเท่านั้นหรือเมื่อคุณทำการทดสอบตามรัฐแบบคลาสสิกมากขึ้นโดยการตรวจสอบค่าที่ส่งคืนจากวัตถุภายใต้การทดสอบ )
เส้นโค้งการเรียนรู้ที่ต่ำมากเป็นผลมาจากสามคะแนนก่อนหน้านี้ ส่วนใหญ่คุณไม่จำเป็นต้องอ่านเอกสาร
การควบคุมพฤติกรรมการเยาะเย้ยด้วยการแจงนับ mockebehavior อย่างง่าย (ไม่จำเป็นต้องเรียนรู้ว่าอะไรคือความแตกต่างทางทฤษฎีระหว่างการเยาะเย้ย, ต้นขั้ว, ปลอม, จำลองแบบไดนามิก ฯลฯ )
เยาะเย้ยทั้งอินเทอร์เฟซและคลาส
การแทนที่ความคาดหวัง: สามารถตั้งค่าความคาดหวังเริ่มต้นในการตั้งค่าการติดตั้งและแทนที่ตามที่จำเป็นในการทดสอบ
ผ่านอาร์กิวเมนต์ตัวสร้างสำหรับชั้นเรียนล้อเลียน
สกัดกั้นและเพิ่มเหตุการณ์ในการเยาะเย้ย
การสนับสนุนที่ใช้งานง่ายสำหรับอาร์กิวเมนต์ out/ref
เราขอขอบคุณข้อเสนอแนะใด ๆ ที่คุณอาจมี! อย่าลังเลที่จะเข้าร่วมในการแชทหรือรายงานปัญหาในการติดตามปัญหา
เรียนรู้เพิ่มเติมเกี่ยวกับผู้สนับสนุน GitHub