मान लीजिए कि आप एक Yahtzee खेल TDD शैली लिख रहे हैं। आप उस कोड के भाग का परीक्षण करना चाहते हैं जो यह निर्धारित करता है कि पांच मर रोल का एक सेट एक पूर्ण घर है या नहीं। जहां तक मुझे पता है, टीडीडी करते समय आप इन सिद्धांतों का पालन करते हैं:
- पहले परीक्षण लिखें
- संभव है कि सबसे सरल बात लिखें
- रिफाइन और रिफ्लेक्टर
तो एक प्रारंभिक परीक्षा कुछ इस तरह दिख सकती है:
public void Returns_true_when_roll_is_full_house()
{
FullHouseTester sut = new FullHouseTester();
var actual = sut.IsFullHouse(1, 1, 1, 2, 2);
Assert.IsTrue(actual);
}
"सबसे सरल बात यह है कि काम करता है संभव लिखें" का पालन करते हुए, आपको अब IsFullHouse
इस तरह की विधि लिखनी चाहिए :
public bool IsFullHouse(int roll1, int roll2, int roll3, int roll4, int roll5)
{
if (roll1 == 1 && roll2 == 1 && roll3 == 1 && roll4 == 2 && roll5 == 2)
{
return true;
}
return false;
}
यह एक हरे रंग की परीक्षा में परिणाम देता है लेकिन कार्यान्वयन अपूर्ण है।
क्या आपको पूर्ण घर के लिए हर संभव वैध संयोजन (मूल्यों और स्थिति दोनों) का परीक्षण करना चाहिए? यह देखने का एकमात्र तरीका है कि यह सुनिश्चित किया जाए कि आपका IsFullHouse
कोड पूरी तरह से परीक्षण और सही है, लेकिन ऐसा करने के लिए यह काफी पागल भी लगता है।
आप यूनिट को कुछ इस तरह कैसे परखेंगे?
अद्यतन करें
एरिक और किलियन बताते हैं कि एक ग्रीन टेस्ट पाने के लिए शुरुआती कार्यान्वयन में शाब्दिक का उपयोग करना सबसे अच्छा विचार नहीं हो सकता है। मैं यह बताना चाहता हूं कि मैंने ऐसा क्यों किया और यह स्पष्टीकरण एक टिप्पणी में फिट नहीं है।
यूनिट परीक्षण (विशेषकर टीडीडी दृष्टिकोण का उपयोग करके) के साथ मेरा व्यावहारिक अनुभव बहुत सीमित है। मुझे याद है कि टेकपब पर रॉय ओशेरोव के टीडीडी मास्टरक्लास की रिकॉर्डिंग देख रहा हूं। एक एपिसोड में वह एक स्ट्रिंग कैलकुलेटर टीडीडी स्टाइल बनाता है। स्ट्रिंग कैलकुलेटर का पूरा विवरण यहां पाया जा सकता है: http://osherove.com/tdd-kata-1
वह इस तरह एक परीक्षण के साथ शुरू होता है:
public void Add_with_empty_string_should_return_zero()
{
StringCalculator sut = new StringCalculator();
int result = sut.Add("");
Assert.AreEqual(0, result);
}
इस Add
विधि के पहले कार्यान्वयन में यह परिणाम है :
public int Add(string input)
{
return 0;
}
फिर यह परीक्षण जोड़ा जाता है:
public void Add_with_one_number_string_should_return_number()
{
StringCalculator sut = new StringCalculator();
int result = sut.Add("1");
Assert.AreEqual(1, result);
}
और Add
विधि फिर से बनाई गई है:
public int Add(string input)
{
if (input.Length == 0)
{
return 0;
}
return 1;
}
प्रत्येक चरण के बाद रॉय कहते हैं "सबसे सरल बात लिखो जो काम करेगा"।
इसलिए मैंने सोचा कि मैं इस दृष्टिकोण को एक टीडीडी-शैली यात्ज़ेई खेल करने की कोशिश करूँगा।
if (roll1 == 1 && roll2 == 1 && roll3 == 1 && roll4 == 2 && roll5 == 2)