जिस तरह से मैं इसे देखता हूं, आप दोनों को फायदा है, और आप एक "नुकसान" (एसआईसी) पर हैं।
लाभ यह है कि आपके पास एक ऐसी प्रणाली है, जिसके साथ आप सहज महसूस करते हैं, और जो आपके लिए काम करती है। आप खुश हैं कि यह आपके उत्पाद की वैधता की पुष्टि करता है, और आपको संभवतः किसी भिन्न फ्रेमवर्क का उपयोग करने वाली किसी चीज़ के लिए अपने सभी परीक्षणों को बदलने के प्रयास में कोई व्यावसायिक मूल्य नहीं मिलेगा। यदि आप अपने कोड को रिफलेक्टर कर सकते हैं, और आपके परीक्षण परिवर्तनों को उठाते हैं - या बेहतर अभी तक, यदि आप अपने परीक्षणों को संशोधित कर सकते हैं और आपका मौजूदा कोड परीक्षणों को तब तक विफल कर देता है, जब तक कि यह फिर से चालू नहीं हो जाता है, तो आपके पास आपके सभी आधार शामिल हैं। तथापि...
एक अच्छी तरह से डिज़ाइन किए गए यूनिट परीक्षण एपीआई होने के फायदों में से एक यह है कि अधिकांश आधुनिक आईडीई में बहुत अधिक देशी समर्थन है। यह हार्ड-कोर VI को प्रभावित नहीं करेगा और वहां के उपयोगकर्ताओं को बाहर निकाल देगा, जो विज़ुअल स्टूडियो उपयोगकर्ताओं को वहाँ से बाहर ले जाते हैं, लेकिन उन लोगों के लिए जो एक अच्छे IDE का उपयोग करते हैं, आपके पास अपने परीक्षणों को डीबग करने और उन्हें निष्पादित करने की क्षमता है IDE ही। यह अच्छा है, हालाँकि आपके द्वारा उपयोग किए जाने वाले ढांचे के आधार पर और भी अधिक लाभ है, और यह आपके कोड का परीक्षण करने के लिए उपयोग की जाने वाली भाषा में है ।
जब मैं भाषा कहता हूं , तो मैं एक प्रोग्रामिंग भाषा के बारे में बात नहीं कर रहा हूं, बल्कि मैं एक धाराप्रवाह वाक्य में लिपटे एक समृद्ध सेट शब्दों के बारे में बात कर रहा हूं जो टेस्ट कोड को कहानी की तरह पढ़ता है। विशेष रूप से, मैं BDD फ्रेमवर्क के उपयोग के लिए एक वकील बन गया हूं । मेरा व्यक्तिगत पसंदीदा डॉटनेट बीडीडी एपीआई स्टोरीक्यू है, लेकिन एक ही मूल उद्देश्य के साथ कई अन्य हैं, जो एक अवधारणा को आवश्यकताओं के दस्तावेज़ से बाहर निकालना है, और इसे कोड में एक समान तरीके से लिखना है कि यह कैसे लिखा जाता है। वास्तव में अच्छा एपीआई हालांकि एक परीक्षण के भीतर हर व्यक्ति के बयान को रोककर और यह दर्शाता है कि क्या उस बयान को सफलतापूर्वक निष्पादित किया गया था, या असफल रहा। यह अविश्वसनीय रूप से उपयोगी है, जैसा कि आप पूरे परीक्षण को जल्दी लौटने के बिना निष्पादित करते हुए देखते हैं, जिसका अर्थ है कि आपके डिबगिंग के प्रयास अविश्वसनीय रूप से कुशल हो जाते हैं क्योंकि आपको केवल परीक्षण के कुछ हिस्सों पर अपना ध्यान केंद्रित करने की आवश्यकता होती है जो पूरी कॉल को डीकोड करने की आवश्यकता के बिना विफल हो जाती है। अनुक्रम। दूसरी अच्छी बात यह है कि परीक्षण आउटपुट आपको यह सब जानकारी दिखाता है,
मैं जो बात कर रहा हूं, उसके उदाहरण के रूप में, निम्नलिखित की तुलना करें:
आवेषण का उपयोग करना:
Assert(variable_A == expected_value_1); // if this fails...
Assert(variable_B == expected_value_2); // ...this will not execute
Assert(variable_C == expected_value_3); // ...and nor will this!
धाराप्रवाह बीडीडी एपीआई का उपयोग करना:
(कल्पना करें कि इटैलिकाइज्ड बिट मूल रूप से विधि सूचक हैं)
WithScenario("Test Scenario")
.Given(*AConfiguration*) // each method
.When(*MyMethodToTestIsCalledWith*, variable_A, variable_B, variable_C) // in the
.Then(*ExpectVariableAEquals*, expected_value_1) // Scenario will
.And(*ExpectVariableBEquals*, expected_value_2) // indicate if it has
.And(*ExpectVariableCEquals*, expected_value_3) // passed or failed execution.
.Execute();
अब दी गई BDD सिंटैक्स लम्बी है, और वर्डियर है, और ये उदाहरण बहुत ही जटिल हैं, हालाँकि बहुत ही जटिल परीक्षण स्थितियों के लिए, जहाँ सिस्टम में बहुत सारी चीजें सिस्टम में दिए गए सिस्टम व्यवहार के परिणामस्वरूप बदल रही हैं, BDD सिंटैक्स आपको स्पष्ट प्रदान करता है आपके परीक्षण क्या हैं, और आपके परीक्षण कॉन्फ़िगरेशन को कैसे परिभाषित किया गया है, इसके बारे में वर्णन करें, और आप इस कोड को एक गैर-प्रोग्रामर को दिखा सकते हैं और वे तुरंत समझ जाएंगे कि क्या चल रहा है। इसके अलावा, यदि "variable_A" दोनों मामलों में परीक्षण में विफल रहता है, तो Asserts उदाहरण पहले एस्टर को निष्पादित नहीं करेगा जब तक कि आपने समस्या को ठीक नहीं किया था, जबकि BDD API श्रृंखला में वर्णित प्रत्येक विधि को बदले में निष्पादित करेगा, और इंगित करेगा कि कौन सा कथन के अलग-अलग हिस्से त्रुटि में थे।
व्यक्तिगत रूप से मुझे लगता है कि यह दृष्टिकोण अधिक परंपरागत xUnit फ्रेमवर्क की तुलना में बेहतर काम करता है, इस अर्थ में कि परीक्षण की भाषा वही भाषा है जो आपके ग्राहक अपनी तार्किक आवश्यकताओं के बारे में बात करेंगे। फिर भी, मैं अपने प्रयासों का समर्थन करने के लिए एक पूर्ण परीक्षण एपीआई का आविष्कार करने की आवश्यकता के बिना एक समान शैली में xUnit चौखटे का उपयोग करने में कामयाब रहा हूं, और जब तक कि अभी भी प्रभावी ढंग से शॉर्ट-सर्किट खुद को प्रभावित करता है, वे अधिक सफाई से पढ़ते हैं। उदाहरण के लिए:
Nunit का उपयोग करना :
[Test]
void TestMyMethod()
{
const int theExpectedValue = someValue;
GivenASetupToTestMyMethod();
var theActualValue = WhenIExecuteMyMethodToTest();
Assert.That(theActualValue, Is.EqualTo(theExpectedValue)); // nice, but it's not BDD
}
यदि आप एक इकाई परीक्षण एपीआई का उपयोग करने का पता लगाने का निर्णय लेते हैं, तो मेरी सलाह है कि थोड़ी देर के लिए बड़ी संख्या में विभिन्न एपीआई के साथ प्रयोग करें, और अपने दृष्टिकोण के बारे में दिमाग रखें और खोलें। जबकि मैं व्यक्तिगत रूप से BDD की वकालत करता हूं, आपकी अपनी व्यावसायिक आवश्यकताओं को आपकी टीम की परिस्थितियों के लिए कुछ अलग करने की आवश्यकता हो सकती है। हालांकि यह महत्वपूर्ण है कि आप अपने मौजूदा सिस्टम का अनुमान लगाने से बचें। यदि आवश्यक हो, तो आप हमेशा अपने मौजूदा परीक्षणों का समर्थन किसी अन्य एपीआई का उपयोग करके कुछ परीक्षणों के साथ कर सकते हैं, लेकिन मैं निश्चित रूप से हर चीज को समान बनाने के लिए एक विशाल परीक्षण को फिर से लिखने की सलाह नहीं दूंगा। जैसा कि विरासत कोड उपयोग से बाहर हो जाता है, आप आसानी से इसे और इसके परीक्षणों को नए कोड के साथ बदल सकते हैं, और वैकल्पिक एपीआई का उपयोग करके परीक्षण कर सकते हैं, और यह एक प्रमुख प्रयास में निवेश करने की आवश्यकता के बिना जो आपको कोई वास्तविक व्यापार मूल्य नहीं देगा। एक इकाई परीक्षण एपीआई का उपयोग करने के लिए,