รายการที่ดีแน่นอน นี่คือความคิดบางประการเกี่ยวกับเรื่องนี้:
เขียนแบบทดสอบก่อนแล้วจึงเขียนโค้ด
ฉันเห็นด้วยในระดับสูง แต่ฉันจะเจาะจงมากขึ้น: "เขียนแบบทดสอบก่อนจากนั้นเขียนโค้ดให้เพียงพอเพื่อผ่านการทดสอบและทำซ้ำ" มิฉะนั้นฉันกลัวว่าการทดสอบหน่วยของฉันจะดูเหมือนการทดสอบการรวมหรือการทดสอบการยอมรับมากกว่า
ออกแบบคลาสโดยใช้การฉีดแบบพึ่งพา
เห็นด้วย เมื่อออบเจ็กต์สร้างการอ้างอิงของตัวเองคุณจะไม่สามารถควบคุมสิ่งเหล่านั้นได้ Inversion of Control / Dependency Injection ช่วยให้คุณสามารถควบคุมได้ช่วยให้คุณสามารถแยกวัตถุที่อยู่ระหว่างการทดสอบด้วย mocks / stubs / etc นี่คือวิธีทดสอบออบเจ็กต์แยกกัน
แยกรหัส UI ออกจากลักษณะการทำงานโดยใช้ Model-View-Controller หรือ Model-View-Presenter
ตกลง โปรดทราบว่าแม้แต่ผู้นำเสนอ / ตัวควบคุมก็สามารถทดสอบโดยใช้ DI / IoC ได้โดยมอบมุมมองและโมเดลที่ถูกตัดต่อ / เยาะเย้ย ลองดูPresenter First TDD สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนั้น
อย่าเขียนวิธีการหรือคลาสแบบคงที่
ไม่แน่ใจว่าฉันเห็นด้วยกับข้อนี้ เป็นไปได้ที่จะทดสอบหน่วยวิธี / คลาสแบบคงที่โดยไม่ต้องใช้ล้อเลียน ดังนั้นนี่อาจเป็นหนึ่งในกฎเฉพาะของ Rhino Mock ที่คุณกล่าวถึง
โปรแกรมปิดอินเทอร์เฟซไม่ใช่คลาส
ฉันเห็นด้วย แต่ด้วยเหตุผลที่แตกต่างกันเล็กน้อย อินเทอร์เฟซให้ความยืดหยุ่นอย่างมากแก่นักพัฒนาซอฟต์แวร์ - นอกเหนือจากการรองรับเฟรมเวิร์กวัตถุจำลองต่างๆ ตัวอย่างเช่นไม่สามารถรองรับ DI ได้อย่างถูกต้องหากไม่มีอินเทอร์เฟซ
แยกการอ้างอิงภายนอก
ตกลง ซ่อนการอ้างอิงภายนอกหลังส่วนหน้าหรืออะแดปเตอร์ของคุณเอง (ตามความเหมาะสม) ด้วยอินเทอร์เฟซ สิ่งนี้จะช่วยให้คุณสามารถแยกซอฟต์แวร์ของคุณออกจากการพึ่งพาภายนอกไม่ว่าจะเป็นบริการเว็บคิวฐานข้อมูลหรืออย่างอื่น สิ่งนี้สำคัญอย่างยิ่งเมื่อทีมของคุณไม่ได้ควบคุมการพึ่งพา (หรือภายนอก)
ทำเครื่องหมายเป็นวิธีเสมือนจริงที่คุณตั้งใจจะล้อเลียน
นั่นเป็นข้อ จำกัด ของ Rhino Mocks ในสภาพแวดล้อมที่ชอบใช้ต้นขั้วที่เข้ารหัสด้วยมือบนเฟรมเวิร์กจำลองวัตถุนั้นไม่จำเป็น
และมีสองประเด็นใหม่ที่ต้องพิจารณา:
ใช้รูปแบบการออกแบบที่สร้างสรรค์ สิ่งนี้จะช่วยเกี่ยวกับ DI แต่ยังช่วยให้คุณสามารถแยกรหัสนั้นและทดสอบโดยไม่ขึ้นกับตรรกะอื่น ๆ
ทดสอบเขียนโดยใช้รูปแบบ / พรบ / เทคนิคการยืนยันบิลปลุกของ เทคนิคนี้ทำให้ชัดเจนมากว่าการกำหนดค่าใดที่จำเป็นสิ่งที่กำลังทดสอบจริงและสิ่งที่คาดหวัง
อย่ากลัวที่จะม้วนล้อเลียน / ต้นขั้วของคุณเอง บ่อยครั้งคุณจะพบว่าการใช้กรอบวัตถุจำลองทำให้การทดสอบของคุณอ่านยากอย่างไม่น่าเชื่อ คุณจะสามารถควบคุมหุ่นจำลอง / ต้นขั้วของคุณได้อย่างสมบูรณ์และคุณจะสามารถอ่านการทดสอบของคุณได้ (อ้างถึงจุดก่อนหน้า)
หลีกเลี่ยงสิ่งล่อใจที่จะทำซ้ำการทำซ้ำจากการทดสอบหน่วยของคุณในคลาสพื้นฐานที่เป็นนามธรรมหรือวิธีการตั้งค่า / การฉีกขาด การดำเนินการดังกล่าวจะซ่อนการกำหนดค่า / รหัสการล้างข้อมูลจากผู้พัฒนาที่พยายามทดสอบหน่วย ในกรณีนี้ความชัดเจนของการทดสอบแต่ละครั้งมีความสำคัญมากกว่าการปรับโครงสร้างการทำซ้ำ
ใช้การบูรณาการอย่างต่อเนื่อง เช็คอินรหัสของคุณที่ "แถบสีเขียว" ทุกอัน สร้างซอฟต์แวร์ของคุณและเรียกใช้การทดสอบหน่วยเต็มรูปแบบในทุกครั้งที่เช็คอิน (แน่นอนว่านี่ไม่ใช่การฝึกเขียนโค้ด แต่เป็นเครื่องมือที่น่าทึ่งในการรักษาซอฟต์แวร์ของคุณให้สะอาดและครบวงจร)