ทุกครั้งที่ฉันพบว่าตัวเองกำลังตรวจสอบหัวข้อของการจัดวางการทดสอบและทุกครั้งที่คนส่วนใหญ่แนะนำโครงสร้างโฟลเดอร์แยกต่างหากข้างรหัสห้องสมุด แต่ฉันพบว่าทุกครั้งที่ข้อโต้แย้งเหมือนกันและไม่น่าเชื่อ ฉันวางโมดูลการทดสอบของฉันที่ใดที่หนึ่งข้างๆโมดูลหลัก
เหตุผลหลักสำหรับการทำเช่นนี้คือ: refactoring refactoring
เมื่อฉันย้ายสิ่งต่าง ๆ ฉันต้องการให้โมดูลทดสอบเคลื่อนที่ไปพร้อมกับโค้ด มันง่ายที่จะสูญเสียการทดสอบหากพวกเขาอยู่ในต้นไม้ที่แยกต่างหาก ขอให้ซื่อสัตย์ไม่ช้าก็เร็วคุณจะจบลงด้วยโครงสร้างโฟลเดอร์ที่แตกต่างอย่างสิ้นเชิงเช่นdjango , flaskและอื่น ๆ อีกมากมาย ไหนดีถ้าคุณไม่แคร์
คำถามหลักที่คุณควรถามตัวเองคือ:
ฉันกำลังเขียน:
- ก) ห้องสมุดที่นำมาใช้ซ้ำหรือ
- b) การสร้างโครงการมากกว่าการรวมโมดูลบางส่วนเข้าด้วยกัน?
หาก:
โฟลเดอร์แยกต่างหากและความพยายามพิเศษในการรักษาโครงสร้างอาจเหมาะสมกว่า ไม่มีใครจะบ่นเกี่ยวกับการทดสอบของคุณได้รับการปรับใช้กับการผลิตนำไปใช้กับการผลิต
แต่ก็เป็นเรื่องง่ายเหมือนกันที่จะแยกการทดสอบออกจากการแจกจ่ายเมื่อผสมกับโฟลเดอร์หลัก วางสิ่งนี้ไว้ใน setup.py :
find_packages("src", exclude=["*.tests", "*.tests.*", "tests.*", "tests"])
ถ้า b:
คุณอาจต้องการ - ตามที่เราทุกคนทำ - คุณกำลังเขียนห้องสมุดที่สามารถใช้ซ้ำได้ แต่ส่วนใหญ่แล้วชีวิตของพวกเขาจะเชื่อมโยงกับชีวิตของโครงการ ความสามารถในการบำรุงรักษาโครงการของคุณควรเป็นเรื่องสำคัญ
จากนั้นถ้าคุณทำได้ดีและโมดูลของคุณเหมาะสำหรับโครงการอื่นมันอาจจะถูกคัดลอก - ไม่แยกหรือทำเป็นห้องสมุดแยก - เข้าสู่โครงการใหม่นี้และทดสอบการเคลื่อนไหวที่อยู่ข้างในโครงสร้างโฟลเดอร์เดียวกัน เป็นเรื่องง่ายเมื่อเทียบกับการตกปลาทดสอบในระเบียบที่โฟลเดอร์ทดสอบแยกเป็น (คุณอาจยืนยันว่ามันไม่ควรเป็นระเบียบในตอนแรก แต่ให้เป็นจริงที่นี่)
ดังนั้นตัวเลือกยังคงเป็นของคุณ แต่ฉันจะโต้แย้งว่าด้วยการทดสอบแบบผสมคุณจะได้รับทุกอย่างเหมือนกับโฟลเดอร์ที่แยกต่างหาก แต่ด้วยความพยายามน้อยกว่าในการรักษาสิ่งต่าง ๆ ให้เป็นระเบียบ