ดังที่ได้กล่าวไว้ในคำตอบที่ได้รับการโหวตมาร์ตินฟาวเลอร์กล่าวถึงความแตกต่างเหล่านี้ในMocks Ar ไม่ใช่ Stubsและโดยเฉพาะอย่างยิ่งหัวข้อย่อยThe Difference ระหว่าง Mocks และ Stubsดังนั้นโปรดอ่านบทความนั้น
แทนที่จะมุ่งเน้นไปที่วิธีการที่สิ่งเหล่านี้จะแตกต่างกันผมคิดว่ามันมากขึ้น enlightening ที่จะมุ่งเน้นว่าทำไมเหล่านี้เป็นแนวความคิดที่แตกต่างกัน แต่ละคนมีอยู่เพื่อจุดประสงค์ที่แตกต่างกัน
ปลอม
ปลอมคือการดำเนินการที่จะทำงาน "ธรรมชาติ" แต่ไม่ได้เป็น "ของจริง" เหล่านี้เป็นแนวคิดที่คลุมเครือและผู้คนต่างมีความเข้าใจที่แตกต่างกันในสิ่งที่ทำให้สิ่งต่าง ๆ เป็นของปลอม
ตัวอย่างหนึ่งของปลอมคือฐานข้อมูลในหน่วยความจำ (เช่นใช้ sqlite กับ:memory:
ร้านค้า) คุณจะไม่ใช้สิ่งนี้เพื่อการผลิต (เนื่องจากไม่มีการยืนยันข้อมูล) แต่มันก็เพียงพอแล้วที่จะใช้เป็นฐานข้อมูลเพื่อใช้ในสภาพแวดล้อมการทดสอบ นอกจากนี้ยังมีน้ำหนักเบากว่าฐานข้อมูล "ของจริง" มาก
เป็นอีกตัวอย่างหนึ่งบางทีคุณอาจใช้ที่เก็บวัตถุ (เช่น Amazon S3) ในการผลิต แต่ในการทดสอบคุณสามารถบันทึกวัตถุลงในไฟล์บนดิสก์ได้ การใช้งาน "บันทึกลงดิสก์" ของคุณจะเป็นของปลอม (หรือคุณอาจปลอมการดำเนินการ "บันทึกลงดิสก์" โดยใช้ระบบไฟล์ในหน่วยความจำแทน)
เป็นตัวอย่างที่สามลองนึกภาพวัตถุที่มีแคช API วัตถุที่ใช้อินเทอร์เฟซที่ถูกต้อง แต่ก็ไม่มีการแคชเลย แต่ส่งคืนแคชที่พลาดเสมอจะเป็นของปลอม
จุดประสงค์ของปลอมไม่ได้ส่งผลกระทบต่อพฤติกรรมของระบบภายใต้การทดสอบแต่เพื่อลดความยุ่งยากในการใช้งานการทดสอบ (โดยการลบการอ้างอิงที่ไม่จำเป็น
ไม่สมบูรณ์
ต้นขั้วคือการดำเนินการที่จะทำงาน "ผิดธรรมชาติ" มันถูกกำหนดค่าไว้ล่วงหน้า (โดยปกติคือการตั้งค่าการทดสอบ) เพื่อตอบสนองต่ออินพุตเฉพาะที่มีเอาต์พุตเฉพาะ
จุดประสงค์ของสตับคือเพื่อให้ระบบของคุณอยู่ระหว่างการทดสอบในสถานะที่ระบุ ตัวอย่างเช่นถ้าคุณกำลังเขียนทดสอบโค้ดบางส่วนที่ติดต่อกับ REST API คุณสามารถต้นขั้วออก REST API ด้วย API ที่เสมอกลับตอบสนองกระป๋องหรือตอบว่าคำขอ API ด้วยข้อผิดพลาดที่เฉพาะเจาะจง วิธีนี้คุณสามารถเขียนการทดสอบที่ยืนยันว่าระบบตอบสนองต่อสถานะเหล่านี้อย่างไร ตัวอย่างเช่นการทดสอบการตอบสนองที่ผู้ใช้ของคุณได้รับหาก API ส่งคืนข้อผิดพลาด 404
โดยปกติจะมีการใช้สตับเพื่อตอบสนองต่อการโต้ตอบที่แน่นอนที่คุณบอกให้ตอบเท่านั้น แต่คุณสมบัติหลักที่ทำให้บางส่วนเป็นต้นขั้วคือจุดประสงค์ : ต้นขั้วทั้งหมดเกี่ยวกับการตั้งค่ากรณีทดสอบของคุณ
mocks
จำลองคล้ายกับต้นขั้ว แต่มีการตรวจสอบเพิ่มใน. วัตถุประสงค์ของการจำลองการให้คือการทำให้การยืนยันเกี่ยวกับวิธีการระบบของคุณภายใต้การทดสอบมีความสัมพันธ์กับการพึ่งพา
ตัวอย่างเช่นหากคุณเขียนทดสอบสำหรับระบบที่อัปโหลดไฟล์ไปยังเว็บไซต์คุณสามารถสร้างจำลองที่ยอมรับไฟล์และคุณสามารถใช้เพื่อยืนยันว่าไฟล์ที่อัปโหลดนั้นถูกต้อง หรือในระดับที่เล็กลงเป็นเรื่องปกติที่จะใช้การจำลองวัตถุเพื่อตรวจสอบว่าระบบภายใต้การทดสอบเรียกวิธีการเฉพาะของวัตถุที่เยาะเย้ย
Mocks เชื่อมโยงกับการทดสอบการโต้ตอบซึ่งเป็นวิธีการทดสอบที่เฉพาะเจาะจง ผู้ที่ต้องการทดสอบสถานะของระบบมากกว่าการโต้ตอบของระบบจะใช้ mocks เท่าที่จำเป็น
ทดสอบสองเท่า
ปลอมไม่สมบูรณ์และ mocks ทั้งหมดอยู่ในหมวดหมู่ของคู่ทดสอบ การทดสอบสองครั้งเป็นวัตถุหรือระบบใด ๆ ที่คุณใช้ในการทดสอบแทนที่จะเป็นอย่างอื่น การทดสอบซอฟต์แวร์อัตโนมัติส่วนใหญ่เกี่ยวข้องกับการใช้การทดสอบสองเท่าหรืออย่างอื่น บางชนิดอื่น ๆ ของคู่ทดสอบรวมถึงค่าหุ่น , สายลับ , และ I / O blackholes