2010-02-19 13 views
14

यहां कुछ व्यावहारिक सलाह और लोगों को इसी तरह की स्थिति में किसी भी अनुभव की तलाश है।टीडीडी: "केवल परीक्षण" तरीके

हम अपने सॉफ्टवेयर (काफी बड़े/जटिल अनुप्रयोग) के निर्माण के लिए बीडीडी/टीडीडी सिटल पद्धति का उपयोग करते हैं। अंतिम परिणाम है .. व्यावसायिक आवश्यकताओं से प्राप्त व्यवहार संबंधी विनिर्देश (दी गई/कब/फिर शैली), इकाई परीक्षण जो इन्हें दर्शाते हैं और कोड जो परीक्षण की आवश्यकताओं को दर्शाता है।

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

समस्या यह है कि कुछ एंटीटी रेपॉजिटरीज़ में डिलीट विधियां नहीं हैं क्योंकि अभी तक इनके लिए कोई व्यावसायिक आवश्यकता नहीं है। कई में पुरालेख/बहाली/बैकअप इत्यादि हैं (और बैकलॉग पर लंबित हटा सकते हैं)।

तो अब हमारे पास एक टेस्ट डिप्टी है। हटाने के लिए आवश्यकता (लेकिन एक जो व्यवसाय प्रयोक्ता कहानियों के साथ संघर्ष करता है)

तो .... मेरा सवाल है ... अगर मैं विशेष रूप से परीक्षण विभाग के लिए विधियों को जोड़ना चाहता हूं ... हैंडलिंग का सबसे अच्छा तरीका क्या नहीं है इन। मैं समझता हूं कि इसे आम तौर पर "टीडीडी यूटोपिया" में बुरी आदत माना जाता है लेकिन वास्तव में, आपने इस तरह के संघर्ष से कैसे निपटाया है?

पहले विचार मैं पड़ा है या तो उपयोग नामकरण रहे हैं ...

void TestOnly_Delete(Guid id){} 

... जिम्मेदार बताते हैं ...

[TestOnly] 
void Delete(Guid id){} 

... या संकलक निर्देशों ...

#if TESTBUILD 
void Delete(Guid id){} 
#endif 

तो कम से कम, डेवलपर्स टेस्टऑनली विधियों को कॉल न करने के लिए जान सकते हैं और अधिकतम पर, परीक्षण विधियों में टेस्ट विधियों को तैनात नहीं किया जाता है।

... या सिर्फ धोखा है और यह कि जिस तरह से ;-)

किसी भी अनुभव या सलाह कृतज्ञता की सराहना की प्रबंधन करने के लिए एक उपयोगकर्ता कहानी जोड़ सकता हूँ?

अग्रिम धन्यवाद।

उत्तर

4

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

जब यह सच है, तो हर तरह से इसे जोड़ें यदि आप आसानी से कर सकते हैं।

कभी-कभी, हालांकि, विपरीत मामला है। इस मामले में, आपको सदस्य जोड़ने के आग्रह का विरोध करना होगा। हालांकि, अक्सर आप Open/Closed Principle का पालन कर सकते हैं और अपना एपीआई खोल सकते हैं ताकि अन्य वांछित कार्यक्षमता जोड़ सकें। Testability is really just another word for the Open/Closed Principle

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

1

मेरे कोड में, मैं एक उपवर्ग बनाने के लिए: उदाहरण के लिए, अगर मैं एक DataLayer वर्ग जिसके लिए डेटा स्तर तक पहुँचने के लिए सभी सार्वजनिक तरीकों है, तो मैं इसे एक Test_DataLayer उपवर्ग, जो DataLayer और से तरीकों विरासत के साथ उपवर्ग सकता है जो Delete जैसे किसी अतिरिक्त तरीके को लागू करता है, और जिसका कार्यान्वयन आधार वर्ग के आंतरिक या संरक्षित तरीकों तक पहुंच सकता है।

1

मैं आमतौर पर "परीक्षण-केवल" प्रोजेक्ट/लाइब्रेरी के साथ समाप्त होता हूं जो मुझे अपने परीक्षणों के लिए जो भी नकली/सहायक कक्षाओं की आवश्यकता होती है। इस नकली पुस्तकालय में आवश्यक कक्षाओं/विधियों को जोड़ना - जो उत्पादन कोड द्वारा शामिल नहीं है - इस आवश्यकता के लिए एक प्राकृतिक फिट की तरह लगता है। यदि आपके पास पहले से ऐसी लाइब्रेरी नहीं है, और एक बनाना नहीं चाहते हैं, तो मैं चिह्नित करूँगा - यदि संभव हो तो - आंतरिक तरीके और केवल उन्हें परीक्षण ढांचे में उजागर करें। आप प्लेटफ़ॉर्म निर्दिष्ट नहीं करते हैं, लेकिन मुझे पता है कि सी #/.NET के साथ यह संभव है और मैं अक्सर अपने परीक्षणों को उन तरीकों तक पहुंचने की क्षमता का उपयोग करता हूं जो अन्यथा लाइब्रेरी के बाहर अनुपलब्ध होंगी।

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

0

यह एक दिलचस्प सवाल है। मेरे पास कुछ विचार है लेकिन यह सुनिश्चित नहीं है कि यह आपकी समस्या का उत्तर होगा या नहीं।

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

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

0

मैं हटा सकते हैं या मेरे कोड के लिए अन्य सफाई तरीकों केवल स्वचालित परीक्षण का समर्थन करने के लिए जोड़ कभी नहीं होगा।

डेटाबेस के बहाल बुद्धिमान लेनदेन प्रबंधन से स्वत: को लेकर इतने सारे विकल्प हैं,।

संबंधित मुद्दे