ฉันพยายามฝึกฝน TDD โดยใช้มันเพื่อพัฒนาวิเช่น Bit Vector ฉันบังเอิญใช้สวิฟท์ แต่นี่เป็นคำถามที่ไม่เชื่อเรื่องภาษา
My BitVectoris คือตัวstructที่เก็บ single UInt64และนำเสนอ API เหนือมันที่ให้คุณปฏิบัติต่อมันเหมือนกับคอลเลกชัน รายละเอียดไม่สำคัญมาก แต่มันค่อนข้างง่าย 57 บิตสูงเป็นบิตหน่วยเก็บข้อมูลและ 6 บิตด้านล่างเป็นบิต "นับ" ซึ่งจะบอกคุณว่าบิตหน่วยเก็บข้อมูลจำนวนหนึ่งเก็บค่าที่มีอยู่จริงได้อย่างไร
จนถึงตอนนี้ฉันมีความสามารถที่เรียบง่ายไม่กี่อย่าง:
- เครื่องมือเริ่มต้นที่สร้างเวกเตอร์บิตที่ว่างเปล่า
countทรัพย์สินของประเภทIntisEmptyทรัพย์สินของประเภทBool- ตัวดำเนินการความเสมอภาค (
==) หมายเหตุ: นี่เป็นตัวดำเนินการค่าความเท่าเทียมกันObject.equals()ใน Java ไม่ใช่ตัวดำเนินการความเท่าเทียมกันอ้างอิงเช่น==ใน Java
ฉันวิ่งเข้าไปในกลุ่มพึ่งพาพึ่งพาวงจร:
BitVectorหน่วยทดสอบที่ทดสอบความจำเป็นในการเริ่มต้นของฉันที่จะตรวจสอบว่ามีการสร้างขึ้นใหม่ สามารถทำได้หนึ่งใน 3 วิธี:- ตรวจสอบ
bv.count == 0 - ตรวจสอบ
bv.isEmpty == true - ตรวจสอบว่า
bv == knownEmptyBitVector
วิธีที่ 1 อาศัย
count, วิธีที่ 2 อาศัยisEmpty(ที่ตัวเองอาศัยcountจึงมีจุดใดที่ใช้มัน) วิธีที่ 3==อาศัย ไม่ว่าในกรณีใดฉันไม่สามารถทดสอบตัวเริ่มต้นแยกได้- ตรวจสอบ
การทดสอบ
countความต้องการในการใช้งานบางอย่างซึ่งทดสอบเบื้องต้นของฉันอย่างหลีกเลี่ยงไม่ได้การดำเนินการ
isEmptyอาศัยcountการดำเนินการต้องอาศัย
==count
ฉันสามารถแก้ปัญหานี้ได้บางส่วนโดยการแนะนำ API ส่วนตัวที่สร้างBitVectorจากรูปแบบบิตที่มีอยู่ (ในฐานะUInt64) สิ่งนี้ทำให้ฉันสามารถเริ่มต้นค่าโดยไม่ต้องทดสอบ initializers อื่น ๆ เพื่อที่ฉันจะได้ "สายรัดบูต" ทางของฉัน
เพื่อให้การทดสอบหน่วยของฉันเป็นการทดสอบหน่วยอย่างแท้จริงฉันพบว่าตัวเองกำลังทำแฮ็กจำนวนมากซึ่งทำให้รหัสการทดสอบและการทดสอบของฉันซับซ้อนขึ้นอย่างมาก
คุณจะแก้ไขปัญหาเหล่านี้ได้อย่างไร?
BitVectorเป็นขนาดหน่วยที่สมบูรณ์แบบสำหรับการทดสอบหน่วยและแก้ไขปัญหาของคุณที่สมาชิกสาธารณะBitVectorต้องการซึ่งกันและกันเพื่อทำการทดสอบที่มีความหมาย