การทดสอบหน่วยคืออะไรจริงเหรอ? และมีการแบ่งขั้วขนาดใหญ่จริงๆในการเล่นที่นี่หรือไม่?
เราทำงานในสาขาที่การอ่านหนึ่งบิตที่ผ่านมาตอนท้ายของบัฟเฟอร์สามารถทำให้โปรแกรมขัดข้องทั้งหมดหรือทำให้ผลลัพธ์ไม่ถูกต้องทั้งหมดหรือเห็นได้จากข้อผิดพลาด "HeartBleed" TLS ล่าสุดวางระบบที่ปลอดภัย เปิดโดยไม่มีการสร้างหลักฐานโดยตรงของข้อบกพร่อง
เป็นไปไม่ได้ที่จะกำจัดความซับซ้อนทั้งหมดออกจากระบบเหล่านี้ แต่งานของเราคือเท่าที่จะทำได้เพื่อลดและจัดการความซับซ้อนนั้น
หน่วยทดสอบการทดสอบที่ยืนยันตัวอย่างเช่นการจองถูกโพสต์เรียบร้อยแล้วในสามระบบที่แตกต่างกันรายการบันทึกจะถูกสร้างขึ้นและการยืนยันทางอีเมลจะถูกส่งออก?
ฉันจะบอกว่าไม่มี นั่นคือการทดสอบบูรณาการ และแน่นอนที่สุดว่าพวกเขามีสถานที่ของพวกเขา แต่พวกเขายังเป็นหัวข้อที่แตกต่างกัน
การทดสอบการรวมจะทำงานเพื่อยืนยันฟังก์ชั่นโดยรวมของฟีเจอร์ "ทั้งหมด" แต่โค้ดที่อยู่เบื้องหลังคุณลักษณะนั้นควรแบ่งออกเป็นแบบเอกสารสำเร็จรูปที่ทดสอบได้ง่ายหรือที่เรียกว่า "หน่วย"
ดังนั้นการทดสอบหน่วยควรมีขอบเขตที่ จำกัด มาก
ซึ่งหมายความว่ารหัสที่ทดสอบโดยการทดสอบหน่วยควรมีขอบเขตที่ จำกัด มาก
ซึ่งหมายความว่ายิ่งไปกว่านั้นหนึ่งในเสาหลักของการออกแบบที่ดีคือการแบ่งปัญหาที่ซับซ้อนของคุณออกเป็นชิ้นเล็กชิ้นเดียวที่มีวัตถุประสงค์เดียว (เท่าที่เป็นไปได้) ซึ่งสามารถทดสอบในการแยกญาติ
สิ่งที่คุณต้องทำคือระบบที่ทำจากส่วนประกอบพื้นฐานที่เชื่อถือได้และคุณรู้ว่าหน่วยพื้นฐานใด ๆ ของการแตกรหัสเพราะคุณเขียนการทดสอบขอบเขตขนาดเล็กง่าย จำกัด เพื่อบอกคุณว่า
ในหลายกรณีคุณควรทดสอบหลายครั้งต่อหนึ่งหน่วย การทดสอบตัวเองควรจะง่ายทดสอบหนึ่งและพฤติกรรมเดียวเท่านั้นในขอบเขตที่เป็นไปได้
ความคิดของ "การทดสอบหน่วย" การทดสอบตรรกะที่ไม่ซับซ้อนซับซ้อนและซับซ้อนคือฉันคิดว่าเป็นบิตของ oxymoron
ดังนั้นหากการแยกประเภทการออกแบบโดยเจตนาเกิดขึ้นแล้วในโลกจะมีการทดสอบหน่วยในทันทีเริ่มก่อให้เกิดผลบวกปลอมเว้นแต่ฟังก์ชันพื้นฐานของหน่วยรหัสทดสอบได้เปลี่ยนไปอย่างไร และหากสิ่งนั้นเกิดขึ้นคุณควรเชื่อว่ามีเอฟเฟกต์ระลอกคลื่นที่ไม่ชัดเจนในการเล่น การทดสอบที่ใช้งานไม่ได้ของคุณอันที่ดูเหมือนว่าจะสร้างผลบวกปลอมเตือนคุณว่าการเปลี่ยนแปลงบางอย่างได้ทำลายวงกว้างของการพึ่งพาในฐานรหัสและจะต้องตรวจสอบและแก้ไข
บางหน่วย (จำนวนมาก) อาจต้องทำการทดสอบโดยใช้วัตถุจำลอง แต่นั่นไม่ได้หมายความว่าคุณต้องเขียนการทดสอบที่ซับซ้อนหรือซับซ้อนมากขึ้น
จะกลับไปตัวอย่างเช่น contrived ฉันของระบบการจองคุณจริงๆไม่สามารถส่งคำขอออกไปยังฐานข้อมูลการจองห้องพักสดหรือบริการของบุคคลที่สาม (หรือแม้กระทั่ง "dev" ตัวอย่างของมัน) ทุกครั้งที่คุณหน่วยทดสอบรหัสของคุณ
ดังนั้นคุณใช้ mocks ที่นำเสนอสัญญาอินเตอร์เฟซเดียวกัน การทดสอบนั้นสามารถตรวจสอบพฤติกรรมของโค้ดที่ค่อนข้างเล็กและกำหนดได้ สีเขียวทั้งหมดที่อยู่บนกระดานจะบอกคุณว่าบล็อกที่ประกอบด้วยรากฐานของคุณจะไม่แตก
แต่ตรรกะของการทดสอบแต่ละหน่วยยังคงง่ายที่สุดเท่าที่จะทำได้