รหัสซ้ำเป็นกลิ่นในรหัสทดสอบหน่วยเช่นเดียวกับรหัสอื่น ๆ หากคุณมีโค้ดที่ซ้ำกันในการทดสอบจะทำให้ยากต่อการ refactor โค้ดการนำไปใช้งานเนื่องจากคุณมีจำนวนการทดสอบที่ไม่ได้สัดส่วนที่จะอัปเดต การทดสอบควรช่วยให้คุณ refactor ด้วยความมั่นใจแทนที่จะเป็นภาระใหญ่ที่ขัดขวางการทำงานของคุณกับโค้ดที่กำลังทดสอบ
หากการทำสำเนาถูกในการติดตั้งการตั้งค่าการพิจารณาการใช้มากขึ้นของsetUp
วิธีการหรือให้มากขึ้น (หรือความยืดหยุ่นมากขึ้น) วิธีการสร้าง
หากการทำซ้ำอยู่ในรหัสที่จัดการกับมทส. ให้ถามตัวเองว่าเหตุใดการทดสอบ "หน่วย" หลายรายการจึงใช้ฟังก์ชันเดียวกันทั้งหมด
หากการทำสำเนาที่อยู่ในการยืนยันแล้วบางทีคุณอาจจะต้องมีการยืนยันที่กำหนดเอง ตัวอย่างเช่นหากการทดสอบหลายรายการมีข้อความยืนยันเช่น:
assertEqual('Joe', person.getFirstName())
assertEqual('Bloggs', person.getLastName())
assertEqual(23, person.getAge())
บางทีคุณอาจต้องใช้assertPersonEqual
วิธีการเดียวจึงจะสามารถเขียนassertPersonEqual(Person('Joe', 'Bloggs', 23), person)
ได้ (หรือบางทีคุณอาจต้องโอเวอร์โหลดตัวดำเนินการความเท่าเทียมกันPerson
)
ดังที่คุณพูดถึงสิ่งสำคัญคือต้องอ่านโค้ดทดสอบได้ โดยเฉพาะอย่างยิ่งสิ่งสำคัญคือเจตนาของการทดสอบจะต้องชัดเจน ฉันพบว่าหากการทดสอบส่วนใหญ่มีลักษณะเหมือนกัน (เช่นสามในสี่ของบรรทัดเหมือนกันหรือแทบจะเหมือนกัน) ก็ยากที่จะระบุและรับรู้ความแตกต่างที่มีนัยสำคัญโดยไม่ต้องอ่านและเปรียบเทียบอย่างรอบคอบ ดังนั้นฉันจึงพบว่าการปรับโครงสร้างใหม่เพื่อลบการทำซ้ำช่วยให้สามารถอ่านได้เนื่องจากทุกบรรทัดของวิธีการทดสอบทั้งหมดเกี่ยวข้องโดยตรงกับวัตถุประสงค์ของการทดสอบ สิ่งนี้มีประโยชน์มากสำหรับผู้อ่านมากกว่าการรวมกันแบบสุ่มของบรรทัดที่เกี่ยวข้องโดยตรงและบรรทัดที่เป็นเพียงต้นแบบ
ที่กล่าวว่าบางครั้งการทดสอบกำลังใช้สถานการณ์ที่ซับซ้อนซึ่งคล้ายคลึงกัน แต่ยังคงแตกต่างกันอย่างมีนัยสำคัญและเป็นการยากที่จะหาวิธีที่ดีในการลดความซ้ำซ้อน ใช้สามัญสำนึก: หากคุณรู้สึกว่าการทดสอบสามารถอ่านได้และทำให้เจตนาของพวกเขาชัดเจนและคุณรู้สึกสบายใจที่อาจจำเป็นต้องอัปเดตมากกว่าจำนวนการทดสอบที่น้อยที่สุดในทางทฤษฎีเมื่อทำการปรับเปลี่ยนรหัสที่เรียกใช้โดยการทดสอบให้ยอมรับความไม่สมบูรณ์และย้าย ไปสู่สิ่งที่มีประสิทธิผลมากขึ้น คุณสามารถกลับมาปรับแต่งการทดสอบในภายหลังได้ทุกเมื่อเมื่อแรงบันดาลใจหยุดลง!