ก่อนคำจำกัดความบางอย่าง:
การทดสอบหน่วยทดสอบหน่วยที่แยกออกจากหน่วยอื่น ๆแต่สิ่งที่หมายถึงไม่ได้กำหนดไว้อย่างชัดเจนโดยแหล่งที่มีสิทธิ์ใด ๆ ดังนั้นขอให้กำหนดมันได้ดีกว่า: ถ้าขอบเขต I / O ถูกข้าม (ไม่ว่า I / O เป็นเครือข่ายดิสก์หรือไม่ หน้าจอหรืออินพุต UI) มีจุดกึ่งกลางที่เราสามารถวาดเส้นได้ หากรหัสขึ้นอยู่กับ I / O รหัสจะข้ามเขตแดนของหน่วยและดังนั้นจะต้องจำลองหน่วยที่รับผิดชอบสำหรับ I / O นั้น
ภายใต้คำจำกัดความนั้นฉันไม่เห็นเหตุผลที่น่าสนใจในการเยาะเย้ยฟังก์ชั่นแท้ ๆ เช่นฟังก์ชั่นแท้ ๆ ซึ่งหมายความว่าการทดสอบหน่วยยืมไปฟังก์ชั่นที่บริสุทธิ์หรือฟังก์ชั่นที่ไม่มีผลข้างเคียง
หากคุณต้องการหน่วยทดสอบที่มีเอฟเฟกต์หน่วยที่รับผิดชอบสำหรับเอฟเฟกต์ควรถูกเยาะเย้ย แต่บางทีคุณควรพิจารณาการทดสอบการรวมระบบแทน ดังนั้นคำตอบสั้น ๆ คือ: "ถ้าคุณต้องการเยาะเย้ยถามตัวเองว่าสิ่งที่คุณต้องการจริงๆคือการทดสอบบูรณาการ" แต่มีคำตอบที่ดีกว่านี้อีกต่อไปและหลุมกระต่ายจะลึกกว่านี้มาก Mocks อาจเป็นรหัสที่ฉันโปรดปรานเพราะมีอะไรมากมายให้เรียนรู้จากพวกเขา
รหัสกลิ่น
สำหรับสิ่งนี้เราจะเปลี่ยนเป็น Wikipedia:
ในการเขียนโปรแกรมคอมพิวเตอร์กลิ่นรหัสเป็นลักษณะใด ๆ ในซอร์สโค้ดของโปรแกรมที่อาจบ่งบอกถึงปัญหาที่ลึกกว่า
มันจะดำเนินต่อไปในภายหลัง ...
"กลิ่นเป็นโครงสร้างบางอย่างในรหัสที่บ่งบอกถึงการละเมิดหลักการออกแบบพื้นฐานและส่งผลเสียต่อคุณภาพการออกแบบ" Suryanarayana, Girish (พฤศจิกายน 2014) การปรับโครงสร้างใหม่สำหรับกลิ่นการออกแบบซอฟต์แวร์ มอร์แกน Kaufmann พี 258
รหัสกลิ่นมักจะไม่ใช่ข้อบกพร่อง ไม่ถูกต้องทางเทคนิคและไม่ได้ป้องกันโปรแกรมจากการทำงาน แต่พวกเขาระบุจุดอ่อนในการออกแบบที่อาจชะลอการพัฒนาหรือเพิ่มความเสี่ยงของข้อบกพร่องหรือความล้มเหลวในอนาคต
กล่าวอีกนัยหนึ่งไม่ได้รหัสกลิ่นทั้งหมดจะไม่ดี แต่เป็นสิ่งบ่งชี้ทั่วไปว่ามีบางสิ่งที่ไม่สามารถแสดงออกมาในรูปแบบที่เหมาะสมและกลิ่นอาจบ่งบอกถึงโอกาสในการปรับปรุงรหัสที่เป็นปัญหา
ในกรณีของการเยาะเย้ยกลิ่นบ่งบอกว่าหน่วยที่ดูเหมือนจะเรียก mocks ขึ้นอยู่กับหน่วยที่จะเยาะเย้ย อาจเป็นข้อบ่งชี้ว่าเราไม่ได้จำแนกปัญหาออกเป็นชิ้นส่วนที่สามารถแก้ไขได้ด้วยอะตอมและนั่นอาจบ่งบอกถึงข้อบกพร่องในการออกแบบในซอฟต์แวร์
สาระสำคัญของการพัฒนาซอฟต์แวร์ทั้งหมดคือกระบวนการแยกปัญหาใหญ่ออกเป็นชิ้นเล็กชิ้นเล็กชิ้นน้อย (การสลายตัว) และรวมวิธีการแก้ปัญหาเข้าด้วยกันเพื่อสร้างแอปพลิเคชั่นที่แก้ปัญหาใหญ่ (องค์ประกอบ)
การเยาะเย้ยเป็นสิ่งจำเป็นเมื่อหน่วยที่ใช้ในการแบ่งปัญหาใหญ่ออกเป็นส่วนย่อย ๆ ขึ้นอยู่กับแต่ละอื่น ๆ อีกวิธีหนึ่งคือการเยาะเย้ยเป็นสิ่งจำเป็นเมื่อองค์ประกอบหน่วยอะตอมที่เราคาดว่าไม่ได้เป็นอะตอมจริงๆและกลยุทธ์การสลายตัวของเราล้มเหลวในการย่อยสลายปัญหาที่ใหญ่กว่าให้กลายเป็นปัญหาอิสระขนาดเล็กที่จะแก้ไข
สิ่งที่ทำให้การเยาะเย้ยรหัสกลิ่นไม่ใช่ว่ามีอะไรผิดปกติกับการเยาะเย้ย - บางครั้งมันมีประโยชน์มาก สิ่งที่ทำให้มีกลิ่นรหัสคือมันสามารถระบุแหล่งที่มาของการมีเพศสัมพันธ์ที่มีปัญหาในใบสมัครของคุณ บางครั้งการลบแหล่งที่มาของการแต่งงานกันนั้นมีประสิทธิผลมากกว่าการเขียนล้อเลียน
การมีเพศสัมพันธ์มีหลายประเภทและบางอย่างดีกว่าอย่างอื่น การเข้าใจว่า mocks เป็นกลิ่นรหัสสามารถสอนให้คุณระบุและหลีกเลี่ยงชนิดที่เลวร้ายที่สุดในช่วงต้นของวงจรการออกแบบแอปพลิเคชันก่อนที่กลิ่นจะพัฒนาเป็นสิ่งที่แย่กว่านั้น