मैं टेस्ट-फ्रेंडली कोड लिखने के लिए सर्वोत्तम प्रथाओं को जानने का प्रयास कर रहा हूं, लेकिन विशेष रूप से ऑब्जेक्ट निर्माण से संबंधित प्रथाओं को समझने की कोशिश कर रहा हूं। नीली किताब में हमने पाया कि हमें इस विचार के साथ हमारी संस्थाओं, मूल्य वस्तुओं इत्यादि के भ्रष्टाचार से बचने के लिए वस्तुओं का निर्माण करते समय आविष्कारों को लागू करना चाहिए, अनुबंध द्वारा डिजाइन हमारी वस्तुओं के भ्रष्टाचार से बचने के लिए समाधान की तरह लगता है, लेकिन जब हम इसका पालन करते हैं, हम इस तरह के लेखन कोड को समाप्त कर सकते हैं:अनुबंध द्वारा डिज़ाइन, परीक्षण-अनुकूल कोड लिखना, ऑब्जेक्ट निर्माण और निर्भरता इंजेक्शन सभी एक साथ सर्वोत्तम प्रथाओं को
class Car
{
//Constructor
public Car(Door door, Engine engine, Wheel wheel)
{
Contract.Requires(door).IsNotNull("Door is required");
Contract.Requires(engine).IsNotNull("Engine is required");
Contract.Requires(wheel).IsNotNull("Wheel is required");
....
}
...
public void StartEngine()
{
this.engine.Start();
}
}
अच्छा यह पहली नजर में अच्छा दिखता है? ऐसा लगता है कि हम एक सुरक्षित वर्ग का निर्माण कर रहे अनुबंध को उजागर कर रहे हैं ताकि प्रत्येक बार Car
ऑब्जेक्ट बनाया गया हो, हम यह सुनिश्चित करने के लिए जान सकते हैं कि ऑब्जेक्ट "मान्य" है।
अब देखते हैं कि यह उदाहरण परीक्षण-संचालित बिंदु से देखें।
मैं परीक्षण के अनुकूल कोड का निर्माण करना चाहते हैं, लेकिन आदेश जब शायद अलगाव में परीक्षण करने के लिए मेरी Car
वस्तु मैं सिर्फ अपनी वस्तु बनाने के लिए या तो एक नकली एक ठूंठ या प्रत्येक निर्भरता के लिए एक डमी वस्तु बनाने के लिए की जरूरत है, यहां तक कि सक्षम होने के लिए में मैं सिर्फ एक विधि का परीक्षण करना चाहता हूं जो केवल StartEngine
विधि जैसी इन निर्भरताओं में से एक का उपयोग करता है। परीक्षण के मिस्को हेवरी दर्शन के बाद मैं अपने परीक्षण को स्पष्ट रूप से निर्दिष्ट करना चाहता हूं कि मुझे दरवाजा या व्हील ऑब्जेक्ट्स की परवाह नहीं है, बस कन्स्ट्रक्टर के नल संदर्भ को पास कर रहा है, लेकिन चूंकि मैं नल की जांच कर रहा हूं, इसलिए मैं इसे नहीं कर सकता
यह सिर्फ कोड का एक छोटा सा टुकड़ा है, लेकिन क्योंकि आप अपने विषय के लिए निर्भरता को हल करने के लिए है जब आप एक असली आवेदन लेखन परीक्षण का सामना कर रहे कठिन है और कठिन हो जाता है
Misko का प्रस्ताव है कि हम चाहिए अशक्त-चेक की नहीं दुरुपयोग कोड (जो अनुबंध द्वारा डिज़ाइन द्वारा विरोधाभासी है) में, लेखन परीक्षण एक दर्द हो जाता है, एक विकल्प के रूप में वह कहता है कि "हमारे कोड सुरक्षित है क्योंकि हमारे पास सिर्फ इतना है कि हमारे कोड सुरक्षित हैं क्योंकि हमारे पास शून्य है हर जगह "
इस पर आपके विचार क्या हैं? आप यह कैसे करेंगे? सबसे अच्छा अभ्यास क्या होना चाहिए?
परीक्षण बिल्डरों, वास्तव में क्या मैं – Jupaol
लिए देख रहा था यह पैटर्न 'वस्तु माँ का नाम है होना करने के लिए हालांकि' परीक्षण डाटा बिल्डर 'थोड़ा अधिक सहज है :-) – Steven