इस अवधारणा के साथ शुरू करना:
1) उस व्यवहार से शुरू करें जो आप चाहते हैं। इसके लिए एक परीक्षण लिखें। परीक्षण विफल देखें।
2) टेस्ट पास करने के लिए पर्याप्त कोड लिखें। सभी परीक्षण पास देखें।
3) निरर्थक / मैला कोड के लिए देखो -> रिफ्लेक्टर। देखें परीक्षण अभी भी पास गोटो १
तो # 1 पर, मान लें कि आप एक नया कमांड बनाना चाहते हैं (मैं यह बता रहा हूं कि कमांड कैसे काम करेगा, इसलिए मेरे साथ सहन करें)। (इसके अलावा, मैं अत्यधिक TDD के बजाय थोड़ा व्यावहारिक हो जाऊंगा)
नया कमांड MakeMyLunch कहलाता है, इसलिए आप पहले इसे तुरंत बनाने के लिए एक परीक्षण बनाएं और कमांड का नाम प्राप्त करें:
@Test
public void instantiateMakeMyLunch() {
ICommand command = new MakeMyLunchCommand();
assertEquals("makeMyLunch",command.getCommandName());
}
यह विफल हो जाता है, आपको नए कमांड क्लास बनाने के लिए मजबूर करता है और इसका नाम वापस कर देता है (शुद्धतावादी कहेंगे कि यह टीडीडी के दो दौर हैं, 1 नहीं)। इसलिए आप क्लास बनाएं और इसमें कमांड नाम वापस करने सहित ICommand इंटरफ़ेस लागू करें। सभी परीक्षणों को चलाना अब सभी पास दिखाता है, इसलिए आप अवसरों को वापस लेने के लिए आगे बढ़ते हैं। शायद कोई नहीं।
तो आगे आप इसे क्रियान्वित करना चाहते हैं। तो आपको पूछना होगा: मुझे कैसे पता चलेगा कि "मेकमायंच" ने सफलतापूर्वक "मेरा दोपहर का भोजन बनाया"। इस ऑपरेशन के कारण सिस्टम में क्या बदलाव आए? क्या मैं इसके लिए परीक्षण कर सकता हूं?
मान लीजिए कि इसके लिए परीक्षण करना आसान है:
@Test
public void checkThatMakeMyLunchIsSuccessful() {
ICommand command = new MakeMyLunchCommand();
command.execute();
assertTrue( Lunch.isReady() );
}
अन्य समय में, यह अधिक कठिन है, और आप वास्तव में क्या करना चाहते हैं, विषय-परीक्षण (मेकमाय्लेन्चकम) की जिम्मेदारियों का परीक्षण करना है। शायद MakeMyLunchCommand की जिम्मेदारी फ्रिज और माइक्रोवेव के साथ बातचीत करना है। तो इसे टेस्ट करने के लिए आप मॉक फ्रिज और मॉक माइक्रोवेव का उपयोग कर सकते हैं। [दो नमूना नकली रूपरेखा Mockito और nMock हैं या यहाँ देखें ।]
किस मामले में आप निम्न छद्म कोड जैसा कुछ करेंगे:
@Test
public void checkThatMakeMyLunchIsSuccessful() {
Fridge mockFridge = mock(Fridge);
Microwave mockMicrowave = mock(Microwave);
ICommand command = new MakeMyLunchCommand( mockFridge, mockMicrowave );
command.execute();
mockFramework.assertCalled( mockFridge.removeFood );
mockFramework.assertCalled( microwave.turnon );
}
शुद्धतावादी आपकी कक्षा की जिम्मेदारी का परीक्षण करने के लिए कहता है - अन्य वर्गों के साथ इसकी बातचीत (क्या कमांड ने फ्रिज खोला और माइक्रोवेव चालू करें?)।
व्यावहारिक कहते हैं कि कक्षाओं के समूह के लिए परीक्षण करें और परिणाम के लिए परीक्षण करें (क्या आपका दोपहर का भोजन तैयार है?)।
सही संतुलन ढूंढें जो आपके सिस्टम के लिए काम करता है।
(ध्यान दें: विचार करें कि शायद आप अपने इंटरफ़ेस संरचना में बहुत जल्दी आ गए हैं। शायद आप इसे अपने इकाई परीक्षणों और कार्यान्वयनों को लिखने के रूप में विकसित होने दे सकते हैं, और चरण # 3 में आप "सामान्य इंटरफ़ेस अवसर" को "नोटिस" करेंगे।