यह है।
यहां तक कि अगर आप सिर्फ यूनिट परीक्षण लेते हैं, तो वास्तव में परीक्षण किए गए कोड की तुलना में परीक्षणों के भीतर अधिक कोड होना असामान्य नहीं है। इसमें कुछ भी गलत नहीं है।
एक साधारण कोड पर विचार करें:
public void SayHello(string personName)
{
if (personName == null) throw new NullArgumentException("personName");
Console.WriteLine("Hello, {0}!", personName);
}
परीक्षण क्या होंगे? यहाँ परीक्षण करने के लिए कम से कम चार सरल मामले हैं:
व्यक्ति का नाम है null। क्या अपवाद वास्तव में फेंक दिया गया है? लिखने के लिए परीक्षण कोड की कम से कम तीन लाइनें हैं।
व्यक्ति का नाम है "Jeff"। क्या हमें "Hello, Jeff!"जवाब में मिलता है? यह परीक्षण कोड की चार लाइनें हैं।
व्यक्ति का नाम एक खाली स्ट्रिंग है। हम किस आउटपुट की उम्मीद करते हैं? वास्तविक उत्पादन क्या है? साइड सवाल: क्या यह कार्यात्मक आवश्यकताओं से मेल खाता है? इसका मतलब है कि यूनिट टेस्ट के लिए कोड की एक और चार लाइनें।
एक स्ट्रिंग के लिए व्यक्ति का नाम काफी छोटा है, लेकिन बहुत लंबे समय तक "Hello, "और विस्मयादिबोधक बिंदु के साथ जोड़ा जा सकता है । क्या होता है? ¹
इसके लिए बहुत सारे परीक्षण कोड की आवश्यकता होती है। इसके अलावा, कोड के सबसे प्राथमिक टुकड़ों में अक्सर सेटअप कोड की आवश्यकता होती है जो कोड के तहत परीक्षण के लिए आवश्यक वस्तुओं को इनिशियलाइज़ करता है, जिससे अक्सर स्टब्स और मोक्स, आदि लिखने की ओर जाता है।
यदि अनुपात बहुत बड़ा है, तो आप किस मामले में कुछ चीजें देख सकते हैं:
क्या परीक्षणों में कोड दोहराव है? तथ्य यह है कि यह परीक्षण कोड है इसका मतलब यह नहीं है कि समान परीक्षणों के बीच कोड को डुप्लिकेट (कॉपी-पेस्ट) किया जाना चाहिए: ऐसे दोहराव से उन परीक्षणों का रखरखाव मुश्किल हो जाएगा।
क्या निरर्थक परीक्षण हैं? अंगूठे के एक नियम के रूप में, यदि आप एक इकाई परीक्षण निकालते हैं, तो शाखा कवरेज घटनी चाहिए। यदि ऐसा नहीं होता है, तो यह संकेत दे सकता है कि परीक्षण की आवश्यकता नहीं है, क्योंकि रास्ते पहले से ही अन्य परीक्षणों द्वारा कवर किए गए हैं।
क्या आप केवल उस कोड का परीक्षण कर रहे हैं जिसे आपको परीक्षण करना चाहिए? आपको तीसरे पक्ष के पुस्तकालयों के अंतर्निहित ढांचे का परीक्षण करने की उम्मीद नहीं है , लेकिन विशेष रूप से परियोजना का कोड ही है।
स्मोक टेस्ट, सिस्टम और इंटीग्रेशन टेस्ट, फंक्शनल और एक्सेप्टेंस टेस्ट और स्ट्रेस और लोड टेस्ट के साथ, आप और भी अधिक टेस्ट कोड जोड़ते हैं, इसलिए वास्तविक एलओसी के हर एलओसी के लिए चार या पांच LOC टेस्ट कुछ ऐसा नहीं है जिसके बारे में आपको चिंतित होना चाहिए।
TDD के बारे में एक नोट
यदि आप अपने कोड का परीक्षण करने में लगने वाले समय के बारे में चिंतित हैं, तो हो सकता है कि आप इसे गलत कर रहे हों, यह पहले कोड है, बाद में परीक्षण। इस मामले में, TDD आपको कोड और परीक्षणों के बीच स्विच करते हुए 15-45 सेकंड के पुनरावृत्तियों में काम करने के लिए प्रोत्साहित करके मदद कर सकता है। टीडीडी के समर्थकों के अनुसार, यह आपके द्वारा किए जाने वाले परीक्षणों की संख्या को कम करके और इससे भी महत्वपूर्ण बात यह है कि व्यवसाय कोड लिखने की मात्रा और विशेष रूप से परीक्षण के लिए फिर से लिखना द्वारा विकास प्रक्रिया को गति देता है।
¹ चलो n होना एक स्ट्रिंग की अधिकतम लंबाई । हम कॉल कर सकते हैं SayHelloऔर संदर्भ के माध्यम से पास कर सकते हैं लंबाई n - 1 जो ठीक काम करना चाहिए। अब, Console.WriteLineकदम पर, स्वरूपण लंबाई n + 8 की एक स्ट्रिंग के साथ समाप्त होना चाहिए , जिसके परिणामस्वरूप एक अपवाद होगा। संभवतः, स्मृति सीमाओं के कारण, यहां तक कि n / 2 वर्णों वाली स्ट्रिंग भी अपवाद को जन्म देगी। एक प्रश्न यह पूछना चाहिए कि क्या यह चौथा परीक्षण एक इकाई परीक्षण है (यह एक जैसा दिखता है, लेकिन औसत इकाई परीक्षणों की तुलना में संसाधनों के संदर्भ में बहुत अधिक प्रभाव हो सकता है) और यदि यह वास्तविक कोड या अंतर्निहित ढांचे का परीक्षण करता है।