จากการอ่านคำอธิบายฉันเข้าใจว่าในการทดสอบ TDD เสร็จแล้วก่อนที่จะเขียนฟังก์ชั่นและในการทดสอบหน่วยมันทำหลังจากนั้น
นี่เป็นความแตกต่างหลักหรือไม่สามารถเปรียบเทียบสองคำนี้ได้ บางทีการทดสอบหน่วยเป็นส่วนหนึ่งของ TDD
จากการอ่านคำอธิบายฉันเข้าใจว่าในการทดสอบ TDD เสร็จแล้วก่อนที่จะเขียนฟังก์ชั่นและในการทดสอบหน่วยมันทำหลังจากนั้น
นี่เป็นความแตกต่างหลักหรือไม่สามารถเปรียบเทียบสองคำนี้ได้ บางทีการทดสอบหน่วยเป็นส่วนหนึ่งของ TDD
คำตอบ:
หน่วยทดสอบหมายถึงสิ่งที่คุณกำลังทดสอบ, TDDไปเมื่อคุณกำลังทดสอบ
ทั้งสองเป็นมุมฉาก
การทดสอบหน่วยหมายถึงการทดสอบพฤติกรรมของแต่ละหน่วย หน่วยของพฤติกรรมแต่ละหน่วยเป็นหน่วยของพฤติกรรมที่เล็กที่สุดที่สามารถทดสอบแยกได้ (ฉันรู้ว่าคำจำกัดความทั้งสองนั้นเป็นวงกลม แต่ดูเหมือนว่าจะได้ผลดีในทางปฏิบัติ)
คุณสามารถเขียนการทดสอบหน่วยก่อนที่จะเขียนรหัสของคุณหลังจากที่คุณเขียนรหัสของคุณหรือในขณะที่คุณเขียนรหัสของคุณ
TDD หมายถึง (อีกครั้งชนิดที่ชัดเจน) ให้การทดสอบขับเคลื่อนการพัฒนาของคุณ (และการออกแบบของคุณ) คุณสามารถทำได้ด้วยการทดสอบหน่วยการทดสอบการใช้งานและการทดสอบการยอมรับ โดยปกติแล้วคุณใช้ทั้งสาม
ส่วนที่สำคัญที่สุดของ TDD เป็นกลางD คุณปล่อยให้การทดสอบผลักดันคุณ การทดสอบจะบอกคุณว่าต้องทำอย่างไรจะทำอย่างไรต่อไปเมื่อคุณทำเสร็จแล้ว พวกเขาบอกคุณว่า API จะเป็นอย่างไรการออกแบบคืออะไร (นี่เป็นสิ่งสำคัญ: TDD ไม่ได้เกี่ยวกับการเขียนการทดสอบก่อนมีหลายโครงการที่เขียนการทดสอบก่อน แต่ไม่ฝึก TDD การทดสอบการเขียนครั้งแรกนั้นเป็นข้อกำหนดเบื้องต้นสำหรับความสามารถในการปล่อยให้การทดสอบพัฒนาขึ้น)
คุณสามารถทำการทดสอบหน่วยโดยไม่ต้องทำการพัฒนาที่ขับเคลื่อนการทดสอบ อย่างไรก็ตามคุณไม่สามารถทำการพัฒนาที่ขับเคลื่อนการทดสอบได้โดยไม่ต้องใช้การทดสอบหน่วย
เมื่อคุณทำการทดสอบหน่วยแบบดั้งเดิมคุณเขียนการทดสอบหลังจากที่คุณเขียนรหัสของคุณ
แนวทางการพัฒนาแบบทดสอบคือการเขียนบททดสอบก่อนเขียนโค้ด
ข้อได้เปรียบที่น่าสนใจที่สุดของ TDD (IMHO) เปรียบเทียบกับการทดสอบหน่วยอย่างง่าย:
การทดสอบ TDD และหน่วยเป็นคำศัพท์เฉพาะสองคำที่มักถูกนำไปใช้ในทางที่ผิด
TDD กำลังเขียนการทดสอบที่จะล้มเหลวจากนั้นจึงเขียนจำนวนรหัสขั้นต่ำที่จำเป็นในการเรียกใช้จากนั้นทำการปรับโครงสร้างรหัสใหม่เพื่อทำให้สะอาด สิ่งนี้ทำในรอบ, ล้มเหลว -> pass -> refactor, เพิ่มการทดสอบใหม่สำหรับข้อกำหนดที่ทราบสำหรับแต่ละรหัส เมื่อไม่นานมานี้ TDD ได้กลายเป็นเรื่องที่เฉพาะเจาะจงมากขึ้นเกี่ยวกับการเขียนการทดสอบหน่วยในรอบนั้นเพื่อแยกความแตกต่างจาก ATDD (เซตย่อยของ BDD) ซึ่งกำลังเขียนการทดสอบการยอมรับในรอบเดียวกัน
การทดสอบหน่วยเป็นเรื่องเกี่ยวกับการทดสอบรหัสในหน่วยเล็ก ๆ ที่แยกได้ ความสับสนทั่วไปที่นี่คือการคิดว่าถ้าคุณใช้เครื่องมือทดสอบหน่วยเช่น xUnit หรือ Rspec เพื่อเรียกใช้การทดสอบที่คุณกำลังเขียนการทดสอบหน่วย นี่ไม่จำเป็นต้องเป็นเรื่องจริง เครื่องมือเหล่านั้นสามารถใช้เพื่อรันการทดสอบพูดโดยใช้เฟรมเวิร์กซีลีเนียม - ในกรณีนี้คุณกำลังเขียนการทดสอบการยอมรับโดยใช้ตัวทดสอบการทดสอบหน่วย การทดสอบหน่วยเป็นการทดสอบเฉพาะอย่างยิ่งซึ่งเน้นไปที่ตรรกะชิ้นเล็ก ๆ ที่แยกได้จากทุกสิ่งทุกอย่างเพื่อความเร็ว (เพื่อให้คุณสามารถเรียกใช้บ่อย ๆ และรับข้อเสนอแนะอย่างรวดเร็วเกี่ยวกับข้อบกพร่องใหม่)
TDD เป็นวิธีการเขียนกรณีทดสอบก่อนการพัฒนาตามที่คุณพูดแล้วผู้พัฒนาเขียนรหัสเพื่อส่งกรณีทดสอบ การทดสอบหน่วยเป็นคำที่ใช้เพื่ออธิบายการทดสอบประเภทอื่น ๆ นอกเหนือจากการทดสอบระบบการทดสอบการรวมและการทดสอบการยอมรับ
TDD เป็นวิธีการเชิงปรัชญาในการเขียนรหัส: เขียนการทดสอบก่อน การทดสอบที่คุณเขียนคือการทดสอบหน่วย
วิธีที่ฉันแยกทั้งสองคือพิจารณาว่า TDD นั้นเกี่ยวกับการทดสอบน้อยกว่าและอื่น ๆ เกี่ยวกับการออกแบบรหัส การทดสอบหน่วยจะถูกใช้เพื่อตั้งค่าความคาดหวังสำหรับรหัสสิ้นสุด เมื่อเขียนรหัสสิ้นสุดและผ่านการทดสอบ (ข้อมูลจำเพาะ) คุณมีรหัสที่ออกแบบโดยใช้การทดสอบ
คำตอบที่ยอดเยี่ยมทั้งหมด ฉันจะเพิ่มเฉพาะการทดสอบหน่วยที่มีแนวโน้มที่จะถือว่า 'หน่วย' เป็นส่วนประกอบขนาดเล็กในขณะที่ TDD ปรับขยายเพื่อรวมการทดสอบการรวมและการยอมรับ
(ตัวแปร TDD บางตัวมองว่า 'หน่วย' เป็นขั้นตอนส่วนเพิ่มเล็กที่สุดไปยังฟังก์ชันที่ต้องการ ... )