मैं एक विरासत वेबसाइट का परीक्षण करने के लिए परीक्षण का एक नया सेट बनाने की कोशिश कर रहा हूं जिस पर मैं काम कर रहा हूं। साइट बैक एंड पर डेटाबेस का उपयोग करती है। मैं SpecFlow और सेलेनियम का उपयोग करने की योजना बना रहा हूं, हालांकि मैं थोड़ा सा स्टंप हूं कि डेटा साफ करने से निपटने का सबसे अच्छा तरीका क्या है।एक specflow परिदृश्य teardown कैसे करें
वर्तमान में मेरे पास नमूना डेटा के एक सेट के साथ डेटाबेस बैकअप है जिसे मैं प्रत्येक परीक्षण चलाने से पहले पुनर्स्थापित करता हूं। हालांकि यह बोझिल है इसलिए मैं रिलीज से पहले महत्वपूर्ण परीक्षण रनों के लिए ऐसा करना चाहता हूं और निरंतर एकीकरण को उसी डेटाबेस पर काम करने के लिए छोड़ देता हूं।
वर्तमान में मैं परीक्षण है कि कुछ इस तरह जाना की एक बड़ी संख्या है:
Secenario: Test Item Creation
Given I am logged in
When I create an item with a unique name
Then an item exists with the unique name
जब कदम सुनिश्चित करने के लिए नाम अद्वितीय है और उसके बाद चरण के लिए एक मॉड्यूल चर के माध्यम से इस तक पहुँच गया है एक GUID का उपयोग करता है जांचें कि यह मौजूद है।
जैसा कि मैंने कहा था, हालांकि मेरे पास इस तरह के कई परीक्षण हैं और मैं उन्हें एक ही डेटाबेस पर कई बार चला रहा हूं, इसलिए परीक्षण प्रणाली उन वस्तुओं से भरा हुआ हो रही है जो खोजों को धीमा कर रही हैं और इसी तरह।
मेरा सवाल यह है कि इससे निपटने का सबसे अच्छा तरीका क्या है? मैं इस तरह फिर से परीक्षण है कि आइटम को हटा देता है में एक और कदम बनाना चाहिए:
Secenario: Test Item Creation
Given I am logged in
When I create an item with a unique name
Then an item exists with the unique name
Then delete the item with the unique name
या अपने परीक्षण ढांचा किसी भी तरह इस से निपटने के लिए सक्षम होना चाहिए? यदि ऐसा है तो लोग क्या करते हैं? स्पीकफ्लो चरण की वैश्विक प्रकृति को देखते हुए मैं कल्पना करता हूं कि सही आदेश में टियरडाउन कदम प्राप्त करना यदि माता-पिता के संबंधों के साथ कई आइटम समस्याग्रस्त हो सकते हैं।
मैं एक स्पष्ट संदर्भ वस्तु पसंद करूंगा जो संदर्भ इंजेक्शन के माध्यम से चरण वर्ग के निर्माता के माध्यम से पारित किया गया है और वहां 'पॉपियोरियोन्टेक्स्ट.क्यूरेंट' का उपयोग करके (जिसे specflow 2.0 में समानांतर परीक्षणों में उपयोग नहीं किया जा सकता) , लेकिन यह मूल रूप से मुझे सही दृष्टिकोण है। –
@SamHolder ScenarioContext.Current एक स्पष्ट संदर्भ वस्तु है यानी यह उस परिदृश्य उदाहरण के लिए विशिष्ट है। समांतर परीक्षणों के साथ इसमें क्या समस्याएं हैं? –
हाँ, मैं समझता हूं कि 'ScenarioContext.Current' क्या है, मुझे लगता है कि यह Specflow में चरणों के बीच राज्य साझा करने का सबसे अच्छा तरीका नहीं है। [मूल रूप से 3 तरीके] (http://stackoverflow.com/a/2963667/97614) हैं, और जेनेरिक 'परिदृश्य कॉन्टेक्स्ट' का उपयोग करने के बजाय विशिष्ट स्थिति के लिए एक स्पष्ट वर्ग का उपयोग करना बहुत बेहतर IMHO है। दिए गए उदाहरण में मैं शायद 'ItemContext' क्लास' संपत्ति 'नाम' के साथ बनाउंगा जिसे मैं ग्रिड पर सेट करूंगा। फिर आप इस श्रेणी का उपयोग टाइपएफ़ तरीके से 'ScenarioContext.Current' –