ฉันพยายามฝึกฝน TDD โดยใช้มันเพื่อพัฒนาวิเช่น Bit Vector ฉันบังเอิญใช้สวิฟท์ แต่นี่เป็นคำถามที่ไม่เชื่อเรื่องภาษา
My BitVector
is คือตัวstruct
ที่เก็บ single UInt64
และนำเสนอ API เหนือมันที่ให้คุณปฏิบัติต่อมันเหมือนกับคอลเลกชัน รายละเอียดไม่สำคัญมาก แต่มันค่อนข้างง่าย 57 บิตสูงเป็นบิตหน่วยเก็บข้อมูลและ 6 บิตด้านล่างเป็นบิต "นับ" ซึ่งจะบอกคุณว่าบิตหน่วยเก็บข้อมูลจำนวนหนึ่งเก็บค่าที่มีอยู่จริงได้อย่างไร
จนถึงตอนนี้ฉันมีความสามารถที่เรียบง่ายไม่กี่อย่าง:
- เครื่องมือเริ่มต้นที่สร้างเวกเตอร์บิตที่ว่างเปล่า
count
ทรัพย์สินของประเภทInt
isEmpty
ทรัพย์สินของประเภท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
ต้องการซึ่งกันและกันเพื่อทำการทดสอบที่มีความหมาย