นี่เป็นความแตกต่างที่สำคัญ แต่น่าเสียดายที่คุณจะไม่พบข้อตกลง ปัญหาคือนักพัฒนาส่วนใหญ่กำหนดสิ่งเหล่านี้จากมุมมองของพวกเขาเอง คล้ายกับการถกเถียงเรื่องดาวพลูโต (ถ้ามันอยู่ใกล้ดวงอาทิตย์มากขึ้นมันจะเป็นดาวเคราะห์หรือไม่)
การทดสอบหน่วยเป็นเรื่องง่ายที่จะกำหนด มันทดสอบ CUT ( Code Under Test ) และไม่มีอะไรอื่น (ให้น้อยที่สุดเท่าที่จะทำได้) นั่นหมายถึงการล้อเลียนการปลอมและการติดตั้ง
ในตอนท้าย ๆ ของสเปกตรัมมีสิ่งที่หลายคนเรียกการทดสอบการรวมระบบ นั่นเป็นการทดสอบให้มากที่สุด แต่ยังคงมองหาจุดบกพร่องในการตัดของคุณเอง
แต่สิ่งที่กว้างใหญ่ระหว่าง?
- ตัวอย่างเช่นถ้าคุณทดสอบมากกว่า CUT เพียงเล็กน้อยล่ะ? จะเกิดอะไรขึ้นถ้าคุณรวมฟังก์ชัน Fibonacci แทนที่จะใช้ฟิกซ์เจอร์ที่คุณฉีดเข้าไป? ฉันจะเรียกสิ่งนั้นว่าการทดสอบการทำงานแต่โลกไม่เห็นด้วยกับฉัน
- ถ้าคุณรวม
time()
หรือrand()
? หรือยังไงถ้าโทรมาhttp://google.com
? ฉันจะเรียกว่าการทดสอบระบบแต่อีกครั้งฉันอยู่คนเดียว
ทำไมเรื่องนี้? เนื่องจากการทดสอบระบบไม่น่าเชื่อถือ สิ่งเหล่านี้มีความจำเป็น แต่บางครั้งอาจล้มเหลวด้วยเหตุผลที่อยู่นอกเหนือการควบคุมของคุณ ในทางกลับกันการทดสอบการทำงานควรผ่านเสมอไม่ล้มเหลวแบบสุ่ม หากรวดเร็วก็อาจใช้ตั้งแต่เริ่มต้นเพื่อใช้ Test-Driven Development โดยไม่ต้องเขียนแบบทดสอบมากเกินไปสำหรับการใช้งานภายในของคุณ ในคำอื่น ๆ ผมคิดว่าการทดสอบหน่วยสามารถเป็นปัญหามากขึ้นกว่าที่พวกเขามีความคุ้มค่าและฉันมีบริษัท ที่ดี
ฉันทำการทดสอบใน 3 แกนโดยมีศูนย์ทั้งหมดที่การทดสอบหน่วย :
- การทดสอบการใช้งาน: ใช้โค้ดจริงที่ลึกลงไปและลึกลงไปใน call-stack ของคุณ
- การทดสอบการรวมระบบ: สูงขึ้นและสูงขึ้นใน call-stack ของคุณ กล่าวอีกนัยหนึ่งคือทดสอบ CUT ของคุณโดยเรียกใช้โค้ดที่จะใช้
- การทดสอบระบบ: การดำเนินการที่ไม่สามารถตอบสนองได้มากขึ้นเรื่อย ๆ (ตัวกำหนดตารางเวลา O / S นาฬิกาเครือข่ายฯลฯ )
การทดสอบสามารถเป็นได้ทั้ง 3 แบบไปจนถึงองศาที่แตกต่างกัน