मैं बिट वेक्टर की तरह एक सरल विकसित करने के लिए इसका उपयोग करके TDD का अभ्यास करने की कोशिश कर रहा हूं। मैं स्विफ्ट का उपयोग कर रहा हूं, लेकिन यह एक भाषा-अज्ञेय प्रश्न है।
मेरे BitVector
एक है struct
कि दुकानों के लिए एक एकल UInt64
, और प्रस्तुत करता है आप इसे एक संग्रह की तरह व्यवहार देता है कि इस पर एक API। विवरण ज्यादा मायने नहीं रखता है, लेकिन यह बहुत आसान है। उच्च 57 बिट्स स्टोरेज बिट्स हैं, और निचले 6 बिट्स "काउंट" बिट्स हैं, जो आपको बताता है कि वास्तव में कितने स्टोरेज बिट्स एक निहित मूल्य को स्टोर करते हैं।
अब तक, मेरे पास बहुत सरल क्षमताएं हैं:
- एक शुरुआती जो खाली बिट वैक्टर का निर्माण करता है
count
प्रकार की एक संपत्तिInt
isEmpty
प्रकार की एक संपत्तिBool
- एक समानता ऑपरेटर (
==
)। NB: यहObject.equals()
जावा में मान-समानता ऑपरेटर ऑपरेटर है , जावा में संदर्भ समानता ऑपरेटर नहीं==
।
मैं चक्रीय निर्भरता के एक समूह में भाग रहा हूं:
मेरे इनिशलाइज़र का परीक्षण करने वाली इकाई परीक्षण को यह सत्यापित करने की आवश्यकता है कि नवनिर्मित
BitVector
। ऐसा 3 तरीकों में से एक में कर सकते हैं:- चेक
bv.count == 0
- चेक
bv.isEmpty == true
- जांच करे
bv == knownEmptyBitVector
विधि 1 पर निर्भर करता है
count
, विधि 2 पर निर्भर करता हैisEmpty
(जो स्वयं पर निर्भर करता हैcount
, इसलिए इसका उपयोग करने का कोई मतलब नहीं है), विधि 3 पर निर्भर करता है==
। किसी भी मामले में, मैं अलगाव में अपने इनिशियलाइज़र का परीक्षण नहीं कर सकता।- चेक
के लिए परीक्षण
count
की जरूरत है कुछ है, जो अनिवार्य रूप से मेरी प्रारंभकर्ता (रों) परीक्षण पर संचालित करने के लिएके कार्यान्वयन पर
isEmpty
निर्भर करता हैcount
के कार्यान्वयन पर
==
निर्भर करता हैcount
।
मैं इस समस्या को आंशिक रूप से एक निजी एपीआई पेश करने में सक्षम था BitVector
जो मौजूदा बिट पैटर्न (एक UInt64
) से निर्माण करता है । इसने मुझे किसी अन्य इनिशियलाइज़र के परीक्षण के बिना मूल्यों को इनिशियलाइज़ करने की अनुमति दी, ताकि मैं अपने तरीके से "बूट स्ट्रैप" कर सकूं।
मेरी यूनिट परीक्षणों के लिए सही मायने में यूनिट टेस्ट होने के लिए, मैं खुद को हैक्स का एक गुच्छा बनाकर पाता हूं, जो मेरे उत्पादों और परीक्षण कोड को काफी हद तक जटिल करता है।
इस प्रकार के मुद्दों के बारे में आप वास्तव में क्या सोचते हैं?
BitVector
इकाई परीक्षण के लिए एक बिल्कुल ठीक इकाई का आकार है और तुरंत अपने मुद्दों को हल करता है किBitVector
सार्थक परीक्षण करने के लिए सार्वजनिक सदस्यों को एक-दूसरे की आवश्यकता होती है।