เดิมที TDD นั้นมาจากการเคลื่อนไหวที่คล่องตัวซึ่งการทดสอบนั้นถูกเขียนขึ้นด้านหน้าเพื่อให้แน่ใจว่าสิ่งที่คุณเขียนยังคงถูกต้องเนื่องจากข้อกำหนดที่ตอนนี้ได้รับการกำหนดอย่างดีในรหัสทดสอบ นอกจากนี้ยังปรากฏว่าเป็นส่วนสำคัญของการปรับโครงสร้างอีกครั้งเมื่อคุณปรับเปลี่ยนรหัสของคุณคุณสามารถพึ่งพาการทดสอบเพื่อพิสูจน์ว่าคุณไม่ได้เปลี่ยนพฤติกรรมของรหัส
จากนั้นคนในเครื่องมือต่าง ๆ เข้ามาและคิดว่าพวกเขารู้ข้อมูลเกี่ยวกับรหัสของคุณและสามารถสร้างสตับทดสอบเพื่อช่วยคุณในการเขียนแบบทดสอบหน่วยและฉันคิดว่านี่เป็นสิ่งที่ผิดพลาด
ตอการทดสอบนั้นสร้างขึ้นโดยคอมพิวเตอร์ที่ไม่มีเงื่อนงำว่าคุณกำลังทำอะไรอยู่มันก็สร้างตอสำหรับทุกวิธีอย่างไร้เหตุผลเพราะนั่นคือสิ่งที่บอกให้ทำ ซึ่งหมายความว่าคุณมีกรณีทดสอบสำหรับแต่ละวิธีโดยไม่คำนึงถึงความซับซ้อนของวิธีการนั้นหรือว่าเหมาะสมสำหรับการทดสอบแบบแยก
สิ่งนี้มาจากการทดสอบจากจุดจบที่ผิดของวิธีการของ TDD ใน TDD คุณควรจะเข้าใจว่าโค้ดต้องทำอะไรจากนั้นก็สร้างโค้ดที่ทำสิ่งนี้ได้ นี่คือการตอบสนองด้วยตนเองเมื่อคุณจบการทดสอบการเขียนที่พิสูจน์ว่ารหัสทำในสิ่งที่รหัสทำไม่ใช่สิ่งที่ควรทำ เมื่อรวมกับการสร้างแบบทดสอบตามวิธีการอัตโนมัติคุณจะเสียเวลามากในการพิสูจน์มุมมองเล็ก ๆ ของรหัสของคุณซึ่งสามารถพิสูจน์ได้อย่างง่ายดายว่าผิดเมื่อชิ้นส่วนเล็ก ๆ ทั้งหมดประกอบเข้าด้วยกัน
เมื่อฟาวเลอร์อธิบายการทดสอบในหนังสือของเขาเขาอ้างถึงการทดสอบในแต่ละชั้นเรียนด้วยวิธีการหลักของตัวเอง เขาปรับปรุงสิ่งนี้ แต่แนวคิดยังคงเหมือนเดิม - คุณทดสอบทั้งคลาสเพื่อให้ทำงานโดยรวมการทดสอบทั้งหมดของคุณรวมเข้าด้วยกันเพื่อพิสูจน์การมีปฏิสัมพันธ์ของวิธีการเหล่านั้นทั้งหมดเพื่อให้ชั้นเรียนสามารถนำกลับมาใช้ใหม่ได้
ฉันคิดว่าชุดเครื่องมือทดสอบทำให้เราเกิดความเสียหายนำเราไปสู่เส้นทางของการคิดว่าชุดเครื่องมือเป็นวิธีเดียวที่จะทำสิ่งต่าง ๆ เมื่อจริง ๆ คุณต้องคิดมากขึ้นเพื่อให้ได้ผลลัพธ์ที่ดีที่สุดจากรหัสของคุณ การใส่รหัสทดสอบลงในส่วนทดสอบขนาดเล็กสำหรับชิ้นส่วนเล็ก ๆ นั้นหมายความว่าคุณต้องทำซ้ำในการทดสอบบูรณาการต่อไป (และถ้าคุณกำลังจะทำอย่างนั้นทำไมไม่ข้ามขั้นตอนการทดสอบหน่วยซ้ำซ้อนตอนนี้) นอกจากนี้ยังหมายถึงผู้คนเสียเวลามากที่จะได้รับความครอบคลุมการทดสอบ 100% และมีเวลามากในการสร้างรหัสจำลองและข้อมูลจำนวนมากซึ่งจะเป็นการใช้จ่ายที่ดีขึ้นทำให้การทดสอบรหัสรวมง่ายขึ้น (เช่นถ้าคุณมีมาก การพึ่งพาข้อมูลการทดสอบหน่วยอาจไม่ใช่ตัวเลือกที่ดีที่สุด)
สุดท้ายความเปราะบางของการทดสอบตามวิธีหน่วยจะแสดงให้เห็นถึงปัญหา การปรับโครงสร้างถูกออกแบบมาเพื่อใช้กับการทดสอบหน่วยหากการทดสอบของคุณผิดพลาดตลอดเวลาเพราะคุณทำการปรับโครงสร้างใหม่สิ่งที่ผิดพลาดอย่างจริงจังกับแนวทางทั้งหมด การปรับโครงสร้างอีกครั้งชอบที่จะสร้างและลบเมธอดดังนั้นวิธีทดสอบตามวิธีตาบอดนั้นไม่ได้เป็นไปตามที่ตั้งใจไว้
ฉันไม่สงสัยเลยว่าวิธีการมากมายจะได้รับการทดสอบที่เขียนขึ้นสำหรับพวกเขาวิธีการสาธารณะทั้งหมดของชั้นเรียนควรได้รับการทดสอบ แต่คุณไม่สามารถหนีจากแนวคิดของการทดสอบร่วมกันเป็นส่วนหนึ่งของกรณีทดสอบเดียว ตัวอย่างเช่นถ้าฉันมีชุดและวิธีการรับฉันสามารถเขียนการทดสอบที่ใส่ข้อมูลและตรวจสอบว่าสมาชิกภายในถูกตั้งค่าเป็น ok หรือฉันสามารถใช้แต่ละคนเพื่อนำข้อมูลบางส่วนแล้วออกมาอีกครั้งเพื่อดูว่ามันเป็น ยังคงเหมือนเดิมและไม่อ่านไม่ออก นี่เป็นการทดสอบคลาสไม่ใช่วิธีแยกกัน หากผู้ตั้งค่าอาศัยวิธีส่วนตัวของผู้ช่วยนั่นก็ไม่เป็นไร - คุณไม่จำเป็นต้องจำลองวิธีการส่วนตัวเพื่อให้มั่นใจว่า setter นั้นทำงานได้ดีไม่ใช่ว่าคุณทดสอบทั้งคลาส
ฉันคิดว่าศาสนากำลังเข้ามาในหัวข้อนี้ดังนั้นคุณจะเห็นความแตกแยกในสิ่งที่เรียกว่าการพัฒนา 'ที่ขับเคลื่อนด้วยพฤติกรรม' และ 'ที่ขับเคลื่อนด้วยการทดสอบ' - แนวคิดดั้งเดิมของการทดสอบหน่วยมีไว้สำหรับการพัฒนาพฤติกรรมที่ขับเคลื่อน