10 วินาทีเป็นเวลาที่ยาวนานมากสำหรับการทดสอบเพียงครั้งเดียว ความรู้สึกของฉันคือเป้าหมายข้อมูลจำเพาะของคุณกำลังเรียกใช้การทดสอบทั้งหน่วยและการรวมในเวลาเดียวกัน นี่เป็นเรื่องปกติที่โครงการจะตกอยู่ในและในบางขั้นตอนคุณจะต้องเอาชนะหนี้ทางเทคนิคนี้หากคุณต้องการผลิตมากขึ้นเร็วขึ้น มีกลยุทธ์หลายอย่างที่ช่วยให้คุณทำสิ่งนี้ได้ ... และฉันจะแนะนำบางส่วนที่ฉันเคยใช้ในอดีต
1. แยกหน่วยจากการทดสอบการรวม
สิ่งแรกที่ฉันจะทำคือแยกหน่วยออกจากการทดสอบการรวม คุณสามารถทำได้โดย:
- การย้าย (ลงในโฟลเดอร์แยกต่างหากภายใต้ไดเร็กทอรีข้อมูลจำเพาะ) - และการปรับเปลี่ยนเป้าหมายคราด
- การติดแท็ก (rspec ช่วยให้คุณสามารถติดแท็กการทดสอบของคุณ)
ปรัชญากล่าวว่าคุณต้องการให้งานสร้างปกติของคุณเป็นไปอย่างรวดเร็วมิฉะนั้นผู้คนจะไม่พอใจที่จะเรียกใช้บ่อยๆ ดังนั้นกลับไปที่ดินแดนนั้น รับการทดสอบปกติของคุณเพื่อรันอย่างรวดเร็วและใช้เซิร์ฟเวอร์การรวมแบบต่อเนื่องเพื่อรันบิลด์ที่สมบูรณ์ยิ่งขึ้น
การทดสอบการรวมคือการทดสอบที่เกี่ยวข้องกับการอ้างอิงภายนอก (เช่นฐานข้อมูล, WebService, คิวและบางส่วนอาจโต้แย้ง FileSystem) การทดสอบหน่วยจะเป็นการทดสอบรายการรหัสเฉพาะที่คุณต้องการตรวจสอบ ควรทำงานเร็ว (9000 ใน 45 วินาทีเป็นไปได้) กล่าวคือส่วนใหญ่ควรทำงานในหน่วยความจำ
2. แปลงการทดสอบการรวมเป็นการทดสอบหน่วย
หากการทดสอบหน่วยจำนวนมากของคุณมีขนาดเล็กกว่าชุดทดสอบการรวมระบบแสดงว่าคุณมีปัญหา สิ่งนี้หมายความว่าความไม่สอดคล้องกันจะเริ่มปรากฏได้ง่ายขึ้น จากตรงนี้ให้เริ่มสร้างการทดสอบหน่วยเพิ่มเติมเพื่อแทนที่การทดสอบการรวม สิ่งที่คุณสามารถทำได้เพื่อช่วยในกระบวนการนี้ ได้แก่
- ใช้กรอบการเยาะเย้ยแทนทรัพยากรจริง Rspec มีกรอบการเยาะเย้ยในตัว
- เรียกใช้ rcov บนชุดทดสอบหน่วยของคุณ ใช้เพื่อวัดว่าชุดทดสอบหน่วยของคุณละเอียดเพียงใด
เมื่อคุณมีการทดสอบหน่วยที่เหมาะสมเพื่อแทนที่การทดสอบการรวม - ลบการทดสอบการรวม การทดสอบซ้ำจะทำให้การบำรุงรักษาแย่ลงเท่านั้น
3. อย่าใช้อุปกรณ์ติดตั้ง
การแข่งขันเป็นสิ่งชั่วร้าย ใช้โรงงานแทน (ช่างเครื่องหรือ Factorybot) ระบบเหล่านี้สามารถสร้างกราฟข้อมูลที่ปรับเปลี่ยนได้มากขึ้นและที่สำคัญกว่านั้นคือสามารถสร้างออบเจ็กต์ในหน่วยความจำที่คุณสามารถใช้ได้แทนที่จะโหลดสิ่งต่างๆจากแหล่งข้อมูลภายนอก
4. เพิ่มการตรวจสอบเพื่อหยุดการทดสอบหน่วยเป็นการทดสอบการรวม
ตอนนี้คุณมีการทดสอบที่เร็วขึ้นแล้วเวลาในการตรวจสอบเพื่อหยุดสิ่งนี้ไม่ให้เกิดขึ้นอีก
มีไลบรารีที่มี Monkey patch active record เพื่อส่งข้อผิดพลาดเมื่อพยายามเข้าถึงฐานข้อมูล (UnitRecord)
คุณสามารถลองจับคู่และ TDD ซึ่งสามารถช่วยบังคับให้ทีมของคุณเขียนแบบทดสอบได้เร็วขึ้นเนื่องจาก:
- มีคนตรวจสอบ - ไม่มีใครขี้เกียจ
- TDD ที่เหมาะสมต้องการการตอบรับที่รวดเร็ว การทดสอบอย่างช้าๆทำให้ทุกอย่างเจ็บปวด
5. ใช้ไลบรารีอื่นเพื่อเอาชนะปัญหา
มีคนกล่าวถึง spork (เพิ่มความเร็วในการโหลดชุดทดสอบใต้ราง 3), hydra / parallel_tests - เพื่อเรียกใช้การทดสอบหน่วยแบบขนาน (ในหลายคอร์)
ควรใช้ LAST ปัญหาที่แท้จริงของคุณอยู่ในขั้นตอนที่ 1, 2, 3 แล้วคุณจะอยู่ในตำแหน่งที่ดีขึ้นในการกำหนดบทบาทของโครงสร้างพื้นฐานเพิ่มเติม