मान लें कि आप इकाई परीक्षण जानते हैं, और यह समझते हुए कि आप "लाल हरे रंग की रिफैक्टर प्रक्रिया" को समझते हैं (क्योंकि आपने कहा था कि आप टीडीडी से परिचित हैं) बीमार जल्दी से एक सामान्य विचित्र विचार प्रक्रिया की व्याख्या करता है।
यदि आप किसी विशेष इकाई की समस्या के बारे में सोचते हैं और अन्य सभी जुड़ी चीजों को निर्भरताओं के संदर्भ में सोचा जाना चाहिए तो आपका टीडीडी जीवन बहुत आसान हो जाएगा। यहां एक नमूना
परिदृश्य: - मैं चाहता हूं कि मेरा प्रोग्राम कंसोल पर हैलो वर्ल्ड प्रदर्शित करे।
TDD विचार प्रक्रिया: -
"मुझे लगता है मेरा कार्यक्रम तो यह करने के लिए मेरा संदेश गुजर सांत्वना कार्यक्रम फोन और उसके बाद मैं अपने सांत्वना कार्यक्रम स्क्रीन पर प्रदर्शित करने के लिए उम्मीद प्रदर्शन शुरू हो जाएगा"
" इसलिए मुझे यह जांचने की ज़रूरत है कि जब मैं अपना प्रोग्राम चलाता हूं, तो उसे कंसोल प्रोग्राम "
" अब निर्भरताएं क्या हैं? हम्म मुझे पता है कि कंसोल प्रोग्राम उनमें से एक है। मुझे चिंता करने की आवश्यकता नहीं है कंसोल को स्क्रीन पर संदेश कैसे मिलेगा (आईओ डिवाइस, प्रिंटिंग और यह सब कॉल करना) मुझे बस इतना ही पता होना चाहिए कि मेरा प्रोग्राम सफलतापूर्वक कंसोल कार्यक्रम कहा जाता है। मुझे विश्वास करना होगा कि कंसोल प्रोग्राम काम करता है और यदि ऐसा नहीं होता है, तो फिलहाल मैं परीक्षण के लिए ज़िम्मेदार नहीं हूं और यह सुनिश्चित करता हूं कि यह काम करता है। जिस जिम्मेदारी का मैं परीक्षण करना चाहता हूं वह यह है कि जब मेरा प्रोग्राम शुरू होता है तो कंसोल प्रोग्राम को कॉल करता है। "
" लेकिन मुझे यह भी नहीं पता कि कंसोल प्रोग्राम किस कॉल को कॉल कर सकता है। अच्छी तरह से मैं System.console.Writeline (कंक्रीट कार्यान्वयन) के बारे में जानता हूं लेकिन फिर यह भविष्य में बदलावों के कारण भविष्य में बदल सकता है, तो मैं क्या करूँ? "
" ठीक है, मैं इंटरफ़ेस (या अमूर्तता) पर निर्भर करता हूं ठोस कार्यान्वयन की तुलना में, तो मैं इंटरफ़ेस जो मैं के खिलाफ परीक्षण कर सकते हैं राज्य "
public interface Iconsole
{
void WriteToConsole(string msg);
}
public class FakeConsole : Iconsole
{
public bool IsCalled = false;
public void WriteToConsole(string msg)
{
IsCalled = true;
}
}
मैं IsCalled सदस्य जिसका डाल दिया है" को लागू करने के लिए एक नकली सांत्वना बना सकते हैं "में बदल जाएगा यदि whe कभी सांत्वना कार्यक्रम कहा जाता है
ठीक है, मुझे पता है कि यह एक लंबी विचार प्रक्रिया की तरह लगता है लेकिन यह भुगतान करता है। टीडी आपको कोडिंग से पहले सोचने के लिए मजबूर करता है जो शर्त है
var console = new FakeConsole();
console.IsCalled = false;
my_program program = new my_program(console);
program.greet();
मैं सांत्वना पारित कर दिया my_program चाहते हैं ताकि my_program कंसोल का उपयोग करेगा: एर तो सोच
दिन के अंत में पहले कोडिंग, आप तो ऊपर नीचे दिए तरीक़े की तरह कुछ के साथ अपने कार्यक्रम को लागू करने की आ सकती है स्क्रीन पर हमारा संदेश लिखने के लिए।
और मेरे my_program कुछ ऐसा दिखाई देगा:
public class my_program
{
Iconsole _consol;
public my_program(Iconsole consol)
{
if (consol != null)
_consol = consol;
}
public void greet()
{
_consol.WriteToConsole("Hello world");
}
}
अंतिम इकाई परीक्षण तो हो जाएगा: -
[TestMethod]
public void myProgramShouldDisplayHelloWorldToTheConsole()
{
//arrange
var console = new FakeConsole();
console.IsCalled = false;
my_program program = new my_program(console);
//act
program.greet();
//assert
Assert.AreEqual(true, console.IsCalled, " console was not called to display the greeting");
}
मैं अंदर रो रहा हूँ। और बाहर पर। – TheTXI
मुझे उम्मीद है कि आप यह नहीं पूछ रहे हैं ताकि आप किसी ऐसे व्यक्ति को टीडीडी प्रदर्शित करने के उत्तर का उपयोग कर सकें जो टीडीडी को समझ में नहीं आता है। मुझे पूरा यकीन है कि हालांकि आप जो अच्छा जवाब प्राप्त कर सकते हैं, वह टीडीडी को विचलित कर देगा और लक्षित दर्शकों को लगता है कि टीडीडी सरल चीजों को कठिन बनाने का एक तरीका है। –
समस्या यह है कि "हैलो वर्ल्ड" टीडीडी के साथ उपयोग करने के लिए एक भयानक उदाहरण है। आपको वास्तव में कुछ ऐसा चाहिए जो परिवर्तनीय इनपुट के आधार पर परिवर्तनीय आउटपुट उत्पन्न करता हो। –