अपने यूनिट परीक्षणों में, मैं अक्सर अपने कोड पर मनमाने ढंग से मान फेंक देता हूं कि यह क्या करता है। उदाहरण के लिए, अगर मुझे पता है कि foo(1, 2, 3)
17 को वापस जाना है, तो मैं यह लिख सकता हूं:
assertEqual(foo(1, 2, 3), 17)
ये संख्या विशुद्ध रूप से मनमानी है और इसका कोई व्यापक अर्थ नहीं है (वे उदाहरण के लिए, सीमा की स्थिति नहीं हैं, हालांकि मैं उन पर भी परीक्षण करता हूं)। मैं इन नंबरों के लिए अच्छे नामों के साथ आने के लिए संघर्ष करूंगा, और ऐसा कुछ लिखना const int TWO = 2;
स्पष्ट रूप से अनहेल्दी है। क्या इस तरह के परीक्षणों को लिखना ठीक है, या मुझे संख्याओं को स्थिरांक में बदलना चाहिए?
में सभी जादू संख्या एक ही बनाया? , हमने सीखा कि जादू संख्या ठीक है यदि अर्थ संदर्भ से स्पष्ट है, लेकिन इस मामले में संख्याओं का वास्तव में कोई अर्थ नहीं है।
const int TWO = 2;
केवल उपयोग करने से भी बदतर है 2
। यह आत्मा के उल्लंघन के इरादे से नियम के शब्दों के अनुरूप है।
foo
में होगा, तो इसका कोई मतलब नहीं होगा, और इसलिए पैरामीटर। लेकिन वास्तविकता में, मैं बहुत यकीन है कि समारोह है कि नाम नहीं है हूँ, और मानकों के नाम की जरूरत नहीं है bar1
, bar2
और bar3
। अधिक यथार्थवादी उदाहरण बनाएं जहां नामों का अर्थ है, तो यह चर्चा करने के लिए बहुत अधिक समझ में आता है कि क्या परीक्षण डेटा मानों को भी नाम की आवश्यकता है।
1, 2, 3
3 डी सरणी सूचकांक हैं, जहां आपने पहले मूल्य संग्रहीत किया था17
, तो मुझे लगता है कि यह परीक्षण बांका होगा (जब तक आपके पास कुछ नकारात्मक परीक्षण भी हैं)। लेकिन अगर यह एक गणना का परिणाम है, तो आपको यह सुनिश्चित करना चाहिए कि इस परीक्षण को पढ़ने वाला कोई भी समझ जाएगा कि क्योंfoo(1, 2, 3)
होना चाहिए17
, और जादू की संख्याएं शायद उस लक्ष्य को प्राप्त नहीं करेंगी।