जब संपत्ति को उत्पादन डेटाबेस (या परीक्षण के लिए क्लोन) में परिभाषित किया जाता है, तो यह एक इकाई परीक्षण नहीं है । एक इकाई परीक्षण काम की एक इकाई की जांच करता है और काम करने के लिए किसी विशेष बाहरी राज्य की आवश्यकता नहीं होती है। यह मानता है कि Offer1
डेटाबेस में पुरुष-केवल प्रस्ताव के रूप में परिभाषित किया गया है। वह बाहरी अवस्था है। तो यह एक एकीकरण परीक्षण का अधिक है , विशेष रूप से एक प्रणाली या स्वीकृति परीक्षण। ध्यान दें कि स्वीकृति परीक्षणों को अक्सर स्क्रिप्ट नहीं किया जाता है (परीक्षण ढांचे में नहीं बल्कि मानव द्वारा मैन्युअल रूप से प्रदर्शन किया जाता है)।
जब संपत्ति को एक if
बयान के साथ डोमेन मॉडल में परिभाषित किया जाता है, तो वही परीक्षण एक इकाई परीक्षण होता है। और यह भंगुर हो सकता है। लेकिन असली समस्या यह है कि कोड भंगुर है। एक सामान्य नियम के रूप में, आपका कोड अधिक लचीला होगा यदि व्यावसायिक व्यवहार हार्ड कोडित के बजाय कॉन्फ़िगर करने योग्य हो। क्योंकि एक छोटी सी कोडिंग त्रुटि को ठीक करने के लिए एक रश परिनियोजन दुर्लभ होना चाहिए। लेकिन बिना किसी नोटिस के बदलने वाली व्यावसायिक आवश्यकता सिर्फ मंगलवार (साप्ताहिक होने वाली चीज़) है।
आप परीक्षण को चलाने के लिए एक इकाई परीक्षण ढांचे का उपयोग कर सकते हैं। लेकिन यूनिट टेस्ट फ्रेमवर्क रनिंग यूनिट टेस्ट तक सीमित नहीं हैं। वे एकीकरण परीक्षण भी कर सकते हैं और कर सकते हैं।
आप एक इकाई परीक्षण लिख रहे थे, तो आप दोनों का सृजन होगा person
और offer1
डेटाबेस राज्य पर कोई निर्भरता के साथ जमीन से। कुछ इस तरह
[Fact]
public void ReturnsFalseWhenGivenAPersonWithAGenderOfFemale()
{
var personId = Guid.NewGuid();
var gender = "F";
var person = new Person(personId, gender);
var id = Guid.NewGuid();
var offer1 = new Offer1(id, "ReturnsFalseWhenGivenAPersonWithAGenderOfFemale");
offer1.markLimitedToGender("M");
Assert.False(offer1.IsEligible(person));
}
ध्यान दें कि यह व्यावसायिक तर्क के आधार पर नहीं बदलता है। यह मुखर नहीं है कि offer1
महिलाओं को खारिज कर दिया। यह offer1
महिलाओं को अस्वीकार करने वाले प्रस्ताव का प्रकार बना रहा है।
आप परीक्षण के भाग के रूप में डेटाबेस बना और कॉन्फ़िगर कर सकते हैं। C # में, NUnit का उपयोग करके, या Java के JUnit में, आप डेटाबेस को एक Setup
विधि में सेट करेंगे । संभवतः आपके परीक्षण ढांचे में एक समान धारणा है। उस पद्धति में, आप SQL के साथ डेटाबेस में रिकॉर्ड सम्मिलित कर सकते हैं।
यदि आपके लिए कोड लिखना मुश्किल है जो उत्पादन डेटाबेस के लिए एक परीक्षण डेटाबेस को प्रतिस्थापित करता है, तो यह आपके अनुप्रयोग में परीक्षण की कमजोरी जैसा लगता है। परीक्षण के लिए, निर्भरता इंजेक्शन की तरह कुछ का उपयोग करना बेहतर होगा जो प्रतिस्थापन के लिए अनुमति देता है। फिर आप ऐसे परीक्षण लिख सकते हैं जो वर्तमान व्यावसायिक नियमों से स्वतंत्र हैं।
इसका एक साइड बेनिफिट यह है कि यह व्यवसाय के मालिक के लिए अक्सर आसान होता है (जरूरी नहीं कि कॉर्पोरेट मालिक, कॉर्पोरेट उत्पाद में इस उत्पाद के लिए ज़िम्मेदार व्यक्ति की तरह) व्यवसाय के नियमों को सीधे कॉन्फ़िगर करने के लिए। क्योंकि यदि आपके पास इस तरह की तकनीकी रूपरेखा है, तो व्यवसाय के स्वामी को ऑफ़र को कॉन्फ़िगर करने के लिए उपयोगकर्ता इंटरफ़ेस (UI) का उपयोग करने की अनुमति देना आसान है। व्यवसाय स्वामी UI में सीमा का चयन करेगा, और यह markLimitedToGender("M")
कॉल जारी करेगा । फिर जब प्रस्ताव डेटाबेस के लिए कायम होता है, तो वह इसे स्टोर कर लेता है। लेकिन आपको इसका उपयोग करने के लिए ऑफ़र को स्टोर करने की आवश्यकता नहीं होगी। इसलिए आपके परीक्षण डेटाबेस में मौजूद किसी ऑफ़र को बना और कॉन्फ़िगर कर सकते हैं।
आपके सिस्टम में वर्णित के अनुसार, व्यवसाय के स्वामी को तकनीकी समूह से अनुरोध करना होगा, जो उचित एसक्यूएल जारी करेगा और परीक्षणों को अपडेट करेगा। या तकनीकी समूह को आपके कोड और परीक्षणों (या फिर कोड) का परीक्षण करना होता है। यह एक बल्कि भारी दृष्टिकोण लगता है। तुम कर सकते हो। लेकिन आपका सॉफ्टवेयर (सिर्फ आपकी टेस्टिंग नहीं) कम भंगुर होगा अगर आपको ऐसा करने की जरूरत नहीं है।
TL; DR : आप इस तरह परीक्षण लिख सकते हैं, लेकिन आप अपने सॉफ़्टवेयर को लिखना बेहतर हो सकते हैं, इसलिए आपको ऐसा करने की आवश्यकता नहीं है।