2010-07-15 17 views
5

मैं बस बीबीडी और specflow भर आया है और यह बहुत दिलचस्प लग रहा है। उपयोगकर्ता कहानियां लिखते समय वे आम तौर पर उच्च स्तर पर और अभिनेता उपयोगकर्ता जीयूआई पर होते हैं। तो जब परिदृश्य लिखते हैं तो वे आमतौर पर सिस्टम के उच्च स्तर से जीयूआई परीक्षण या एकीकरण परीक्षण होंगे। लेकिन समाधान में इकाई परीक्षण के बारे में और क्या नीचे? जैसे सेवा अंतराल, व्यापार वस्तुओं, आदि। क्या मुझे उन लोगों के लिए नए परिदृश्य लिखना चाहिए या क्या निम्न स्तर परीक्षण (यूनिट परीक्षण) के लिए समान परिदृश्यों का पुन: उपयोग करने का कोई तरीका है या क्या मुझे परिदृश्यों की प्रतिलिपि बनाना चाहिए?दोनों एकीकरण परीक्षण और इकाई परीक्षणों के लिए स्पेकफ्लो परिदृश्य का उपयोग

अगर मुझे यह सब गलत लगता है तो कृपया मुझे बताएं।

उत्तर

9

स्पेकफ़्लो जैसे बीडीडी ढांचे को तकनीकी टीम के सदस्यों को किसी परियोजना के गैर तकनीकी हितधारकों के साथ अधिक आसानी से संवाद करने में मदद करने के लिए डिज़ाइन किया गया है।

अंग्रेजी-भाषा चश्मा बनाए रखने या रिफैक्टर करने में आसान नहीं हैं। चूंकि यूनिट-स्तरीय परीक्षण या उदाहरण पढ़ने वाले एकमात्र लोग तकनीकी और कोड पढ़ने में सक्षम हैं, इसलिए मैं उस स्तर पर यूनिट-परीक्षण फ्रेमवर्क जैसे एनयूनीट का उपयोग करना पसंद करता हूं।

यूनिट परीक्षणों की तुलना में परिदृश्यों में अक्सर अधिक जटिलता होती है। आम तौर पर मुझे लगता है कि वे आंतरिक व्यापार तर्क के कई संयोजनों को कवर करते हैं, और प्रत्येक पहलू जो संयोजन बनाता है, कोड की एक अलग इकाई की ज़िम्मेदारी होगी। इसलिए परिदृश्यों में तर्क कई अलग-अलग यूनिट परीक्षणों के बीच विभाजित हो जाएगा, और आप उन्हें कॉपी करने में सक्षम नहीं होंगे।

कभी-कभी मैं अपने यूनिट परीक्षणों को मार्गदर्शन करने के लिए परिदृश्यों का उपयोग करता हूं। मुझे लगता है कि थोड़ा सा तर्क कोड की एक विशेष इकाई की ज़िम्मेदारी बनता है, और फिर मैं परिदृश्य से केवल प्रासंगिक चरणों को एक टिप्पणी के रूप में यूनिट परीक्षणों में कॉपी कर सकता हूं। (: PayOut जैसे)

// Given I have $100 in my account 
var account = new Mock<Account>(); 
account.SetupGet(a => a.Balance).Returns(100); 

var accountProvider = new Mock<AccountProvider>(); 
accountProvider.Setup(ap => ap.AccountFor("lunivore")).Returns(account); 

// When I ask for $20 
var atm = new ATM(accountProvider); 
atm.PutInCardFor("lunivore"); 
int money = atm.RequestMoney(20); 

// Then I should get $20 
Assert.AreEqual(20, money); 

// And my account should have paid out $20 
account.verify(a => a.PayOut(20)); 

मैं जिस भाषा में लिखे गए हैं परिदृश्यों कॉपी करने के लिए प्रोत्साहित करते हैं। यह डोमेन संचालित डिजाइन की "सर्वव्यापी भाषा" के साथ गठबंधन है। उस यूनिट परीक्षण और कोड दोनों में उस भाषा को ले जाने से टीम को हितधारकों के साथ बातचीत करने में मदद मिलती है, क्योंकि आपको अनुवाद को और अधिक नहीं करना पड़ेगा।

दिए गए/कब/फिर टिप्पणियों में डालकर वास्तव में मुझे सभी किनारे के मामलों में अनुमान लगाने की कोशिश करने के बजाय वास्तव में उपयोग किए जा रहे कोड को वितरित करने पर ध्यान केंद्रित करने में मदद मिलती है। सर्वोत्तम गुणवत्ता कोड वह सामान है जो आप लिखते हैं।

शुभकामनाएं!