เพื่อโหลดหรือไม่โหลดข้อมูลสำหรับการทดสอบหน่วยจากไฟล์ภายนอก


17

เมื่อการทดสอบหน่วยฉันมักพบว่าตนเองถกเถียงกันถึงจำนวนข้อมูลที่ฉันป้อนและคาดว่าจะกลับมาจากการทดสอบหน่วยฉันควรรวมไว้ในไฟล์ทดสอบจริง

ข้อเสียที่ฉันต้องดิ้นรนอยู่ตลอดเวลาคือ:

  • หากส่วนใหญ่ของการทดสอบ (ในปริมาณรหัส) ประกอบด้วยข้อมูลอินพุตและเอาต์พุตดูเหมือนว่าเป็นการยากที่จะอ่านการทดสอบจริง ๆ แต่ฉันสามารถเห็นการรับเข้าและออกจริงได้อย่างง่ายดาย
  • หากฉันโหลดข้อมูลทดสอบจากไฟล์ฉันสามารถทดสอบรูปแบบต่าง ๆ ของการป้อนข้อมูลที่เป็นไปได้อย่างง่ายดายนำข้อมูลการทดสอบซ้ำมาใช้สำหรับการทดสอบหลาย ๆ ครั้งได้อย่างง่ายดาย แต่ฉันต้องปล่อยให้ซอร์สโค้ดเพื่อดูไฟล์อื่น ๆ .

เป็นหนึ่งในสิ่งเหล่านี้ต่อต้านรูปแบบ?


ข้อมูลประเภทใด
Jon Reid

@ JonReid: ข้อความส่วนใหญ่
DudeOnRock

คำตอบ:


11

เพื่อตอบคำถามของคุณโดยตรง - ไม่ฉันไม่เชื่อว่าเป็นรูปแบบการต่อต้านเมื่อใช้อย่างถูกต้อง

--- คำตอบ verbose เพิ่มเติม ---

จากประสบการณ์ของฉันฉันคิดว่าสิ่งนี้ขึ้นอยู่กับเป้าหมายของการทดสอบของคุณเป็นอย่างมาก นี่คือกฎง่ายๆที่ฉันใช้ในอดีตและมันช่วยให้ฉันตัดสินใจ:

คุณกำลังทดสอบโค้ดขนาดเล็กหรือไม่ (การทดสอบหน่วยที่แท้จริง)

ถ้าใช่ฉันได้พบว่ามันง่ายกว่ามากในการสร้างข้อมูลภายในการทดสอบตัวเองเพราะฉันสามารถเห็นสิ่งที่กำลังถูกส่งเข้ามาในกรณีเหล่านี้ฉันมักจะมองหาไลบรารีที่เหมือนจัสมินเพื่อใช้เพราะฉันพบว่า มันทำให้การสร้างและบำรุงรักษาข้อมูลทดสอบง่ายขึ้น นั่นเป็นความชอบส่วนตัว - ใช้สิ่งที่ทำให้งานของคุณง่ายขึ้น

ถ้าไม่เช่นนั้นคุณอาจทำการทดสอบระบบด้วยตัวเอง ในกรณีเหล่านี้ฉันมักจะโหลดข้อมูลจากแหล่งภายนอกด้วยเหตุผลที่:

  1. การทดสอบนี้ไม่ได้เกี่ยวกับความชัดเจนของรหัสสำหรับโปรแกรมเมอร์ (แม้ว่าจะยังคงมีความสำคัญ - บางคนต้องทำการบำรุงรักษา) มันเกี่ยวกับการเรียกใช้ข้อมูลประเภทต่างๆที่เพียงพอผ่านทางระบบทั้งหมดเพื่อให้แน่ใจว่าทำงานได้ดี
  2. บ่อยครั้งที่ฉันจะเขียนรหัสการประปาเพื่อโหลดและใช้ข้อมูลการทดสอบ แต่ข้อมูลตัวเองถูกสร้างขึ้นโดยคนอื่น (โดยปกติจะเป็นพนักงาน QA ในกรณีของฉัน) คนเหล่านี้มักจะไม่ใช่โปรแกรมเมอร์ดังนั้นฉันไม่สามารถคาดหวังให้พวกเขาแก้ไขโค้ดได้

สั้นคำตอบสั้น ๆ มันขึ้นอยู่กับสิ่งที่คุณกำลังทดสอบและทำไม ทั้งสองวิธีมีประโยชน์และมีที่อยู่อาศัย - เลือกสิ่งที่ดีที่สุดสำหรับสถานการณ์ของคุณ


9

ฉันไม่เห็นการแลกเปลี่ยนที่นี่ ซอร์สโค้ดควรจะอธิบายอัลกอริทึมหรืออย่างน้อยตรรกะธุรกิจไม่ใช่ข้อมูลจำนวนมาก หากคุณเขียนการแปลงฟูริเยร์คุณต้องการตรวจสอบว่าเสียงไซนัสนั้นถูกแมปอย่างถูกต้องกับจุดสูงสุดเดียวเสียงผสมไปยังยอดเขามากขึ้น ฯลฯ แต่เพื่อให้เพียงพอที่จะป้อนไฟล์ที่มีชื่อsinus.wavในรูทีนและยืนยันว่า โครงสร้างเอาต์พุตเป็นสิ่งที่คุณคาดหวัง

แน่นอนว่าในทางเทคนิคคุณไม่ได้รับการรับรองทันทีที่sinus.wavมีน้ำเสียงไซนัสจริง ๆ แต่อย่างที่คุณพูดการระบุค่าแอมพลิจูด 100,000 แอมพลิจูดในแหล่งที่มาไม่ได้ให้คุณอย่างนั้นจริง ๆ แล้วมันแย่กว่าเพราะคุณ อย่างน้อยสามารถเล่นไฟล์ภายนอกด้วยเครื่องเล่นเสียงเพื่อตรวจสอบในขณะที่ค่าข้อมูลที่ฝังอยู่ในซอร์สโค้ดนั้นเป็นไปไม่ได้ที่จะทำสิ่งใดด้วย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.