2008-09-01 17 views
14

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

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

अतीत में मैं एक परीक्षण डेटाबेस में परीक्षण डाटा डालने की कोशिश की है, तो परीक्षण चल रहा है, लेकिन ईमानदारी से यह बहुत दर्दनाक है कोड (और त्रुटि प्रवण) इस तरह का लिखने के लिए। मैंने बस एक टेस्ट डेटाबेस बनाने और बदलावों को वापस रोल करने की कोशिश की है। यह ठीक काम करता है लेकिन कई स्थानों पर आप आसानी से ऐसा नहीं कर सकते हैं (और कई लोग कहेंगे कि यह एकीकरण परीक्षण है, इसलिए हो, मुझे अभी भी इसका परीक्षण करने में सक्षम होना चाहिए)।

अगर जवाब है कि इस से निपटने का एक अच्छा तरीका नहीं है और यह वर्तमान में केवल एक तरह से बेकार है कि है, कि रूप में अच्छी तरह पता करने के लिए उपयोगी होगा।

कोई सोच, विचार, सुझाव, या सुझावों की सराहना कर रहे हैं।

उत्तर

2

मैं के रूप में मैं एक रोलबैक समाधान के साथ इन एकीकरण परीक्षणों के पास जाने की कोशिश दूसरे @Phil बेनेट ने टिप्पणी करने के लिए है।

मैं एकीकरण के परीक्षण के अपने डेटा का उपयोग परत के बारे में एक बहुत विस्तृत पोस्ट किया है here

मैं दिखाने के लिए न केवल नमूना डेटा का उपयोग वर्ग, आधार वर्ग, और नमूना डीबी लेनदेन स्थिरता वर्ग है, लेकिन एक पूर्ण CRUD एकीकरण परीक्षण w/नमूना डेटा दिखाया गया। इस दृष्टिकोण के साथ आपको कई परीक्षण डेटाबेस की आवश्यकता नहीं है क्योंकि आप प्रत्येक परीक्षण के साथ चल रहे डेटा को नियंत्रित कर सकते हैं और परीक्षण पूरा होने के बाद लेनदेन सभी रोलबैक हैं ताकि आपका डीबी साफ़ हो।

आपके ऐप के अंदर यूनिट परीक्षण व्यवसाय तर्क के बारे में, मैं @ फिल और @ मार्क द्वारा टिप्पणियों को भी दूसरी बार दूंगा क्योंकि यदि आप अपनी व्यावसायिक वस्तु के सभी निर्भरताओं को मजाक करते हैं, तो यह आपके आवेदन तर्क की एक इकाई का परीक्षण करना बहुत आसान हो जाता है एक समय;)

संपादित करें: तो क्या आप एक विशाल एकीकरण परीक्षण की तलाश कर रहे हैं जो लॉजिक प्री-डेटा बेस/संग्रहीत प्रक्रिया रन डब्ल्यू/तर्क से सबकुछ सत्यापित करेगा और आखिरकार वापस रास्ते पर एक सत्यापन होगा? यदि ऐसा है तो आप इस 2 चरणों में बाहर तोड़ सकता है:

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

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

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

0

यही तर्क से अधिक विभिन्न रन के बहुत सारे के लिए लेकिन जैसा कि आप निवेश के लिए पसंद है और उत्पादन आदि

2

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

भी तो मैं TestFixtureSetUp विधि में एक DB लेनदेन खोलने (स्पष्ट रूप से यह है कि क्या इकाई परीक्षण रूपरेखा आप उपयोग कर रहे हैं पर निर्भर करता है) और टेस्ट स्वीट TestFixtureTeardown के अंत में लेन-देन रोलबैक करते हैं।

+0

हां रोलबैक रणनीति अतीत में मेरे लिए अच्छी तरह से काम करती है। – tjjjohnson

1

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

सामान्य सभी मानक unti परीक्षण के नियमों में अभी भी पकड़:

  • कोशिश इकाइयों छोटे और संभव के रूप में असतत के रूप में परीक्षण किया जा रहा बनाने के लिए।
  • परीक्षणों को स्वतंत्र बनाने की कोशिश करें।
  • फैक्टर कोड निर्भरता दसगुणा।
  • उपयोग मजाक उड़ाता है और स्टब्स (dataaccess की तरह)

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

परीक्षण के लिए नमूना डेटा संकलित करने के लिए एक अच्छी पद्धति जो अभी भी जटिल इनपुट डेटा की आवश्यकता है Orthogonal testing है, या here देखें।

मैं WCF और BizTalk समाधान जहां इनपुट संदेशों के क्रमपरिवर्तन कई संभव निष्पादन पथ बना सकते हैं के लिए परीक्षण की योजना पैदा करने के लिए विधि की इस प्रकार की उपयोग किया है।

2

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

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

कहा जा रहा है कि आप पूरी तरह से संचालित परीक्षण केवल परीक्षण है कि वास्तव में अपनी पीठ अंत सिस्टम को लागू करने की जरूरत है की amout सीमित डेटा से दूर कभी नहीं मिल सकता है।

6

मेरे स्वचालित कार्यात्मक परीक्षण आमतौर पर का पालन दो patters में से एक:

  • डाटाबेस कनेक्टेड टेस्ट
  • नकली हठ परत टेस्ट

डाटाबेस कनेक्टेड टेस्ट

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

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

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

परीक्षण की यह शैली स्पष्ट रूप से काम नहीं करती है अगर आप इच्छानुसार नए परीक्षण डेटाबेस उत्पन्न नहीं कर सकते हैं।

नकली हठ परत टेस्ट

इस पैटर्न के लिए, आप mock objects कि परीक्षण मामलों के साथ रहती पैदा करते हैं। ये नकली वस्तुएं डेटाबेस को कॉल को रोकती हैं ताकि आप प्रोग्रामेटिक रूप से उपयुक्त परिणाम प्रदान कर सकें। असल में, जब आप जिस कोड का परीक्षण कर रहे हैं उसे findCustomerByName() विधि कहते हैं, तो आपके मॉक ऑब्जेक्ट को दृढ़ता परत के बजाय बुलाया जाता है।

नकली ऑब्जेक्ट परीक्षणों का उपयोग करने के बारे में अच्छी बात यह है कि आप बहुत विशिष्ट हो सकते हैं। अक्सर बार, निष्पादन पथ होते हैं जिन्हें आप आसानी से स्वचालित परीक्षण w/o नकली वस्तुओं तक नहीं पहुंच सकते हैं। वे आपको टेस्ट डेटा के बड़े, मोनोलिथिक सेट को बनाए रखने से भी मुक्त करते हैं।

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

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

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