2012-12-07 14 views
9

वर्तमान में अधिक से अधिक पैरामीटर है हम इस कदम है:specflow: - "अस्पष्ट कदम परिभाषाओं कदम के लिए मिला" जब 1 कदम अन्य

[When(@"I set the scenario price for product (.*) to (.*) in the (.*) zone") 
public void WhenISetTheScenarioPriceInZoneForProductPToN(string product, string priceStr, string zone) 
:

[When(@"I set the scenario price for product (.*) to (.*)")] 
public void WhenISetTheScenarioPriceForProductPToN(string product, string priceStr) 

मैं कदम जोड़ना चाहते हैं

हालांकि spec प्रवाह दो चरणों के बीच एक "चरणबद्ध चरण परिभाषाएं" त्रुटि प्रदान करता है।

मैं थक गया है:

[When(@"I set the scenario price for product (.*) to (.*) in the (.*) zone")] 
    [When(@"I set the scenario price for product (.*) to (.*)")] 
    public void WhenISetTheScenarioPriceInZoneForProductPToN(string product, string priceStr, string zone) 

लेकिन यह है कि एक के साथ विफल "बाइंडिंग त्रुटि: पैरामीटर गिनती बेमेल ' मैं उम्मीद कर रहा था कि यह दूसरे "कब" के लिए शून्य हो जाएगा।

+0

मैं परीक्षण में समान चरणों के साथ संदिग्ध चरण मुद्दे को पुन: उत्पन्न नहीं कर सकता, लेकिन पैरामीटर गिनती मेल नहीं है क्योंकि प्रत्येक रेगेक्स पैटर्न कोड विधि के लिए पैरामीटर उत्पन्न करता है। यह डिफ़ॉल्ट पैरामीटर मानों का समर्थन करने के लिए प्रतीत नहीं होता है। –

+0

@ एडमिन, जो specflow में एक बग की तरह लग रहा है क्योंकि मुझे नहीं लगता कि क्यों "कब" और "दिया" shuold एक अलग तरीके से मैच। –

उत्तर

11

समस्या आपकी दूसरी (। *) है। यह "एबीसी क्षेत्र में xyz" से मेल खाने के लिए विस्तारित हो सकता है। क्या आप इसके बजाय सिर्फ एक शब्द से मेल खा सकते हैं? i.e. (\ w +)

[When(@"I set the scenario price for product (.*) to (\w+)")] 

इससे एबीसी क्षेत्र में छोटे रेगेक्स मिलान को भी रोका जाएगा।

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

इसके अलावा, आपके पास हमेशा रेगेक्स की समान संख्या पैरामीटर के रूप में होती है, यही कारण है कि संयुक्त कोई काम नहीं करता है।


यह मेरे लिए काम नहीं करता है, यह "0.9 9" और "।" की कीमत के कारण है। \ w द्वारा मेल नहीं किया जा रहा है। हालांकि इस काम करता है:

[When(@"I set the scenario price for product (.*) to (\S+)")] 
public void WhenISetTheScenarioPriceForProductPToN(string product, string priceStr) 
हमारे "परीक्षण मूल्यों" के रूप में

उन में रिक्त स्थान नहीं है।

+0

यदि आप संख्याओं का उपयोग कर रहे हैं तो (\ d + (\। \ D +)?) पर विचार करें जो दशमलव स्थानों के साथ और बिना मेल खाता है – AlSki

3

मैं शुरू में माना जाता है कि इस वजह से पहला कदम परिभाषा के अंत में regex:

[When(@"I set the scenario price for product (.*) to (.*)")] 

यह कब्जा (या मैच) हैं एक ही स्ट्रिंग कि आपका हाल में परिभाषा में जाना होगा।

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

public void WhenISetTheScenarioPriceInZoneForProductPToN(string product, double price, string zone) 

public void WhenISetTheScenarioPriceForProductPToN(string product, double price) 

अब हालांकि regex नहीं बदला है और इसलिए सिद्धांत अभी भी लालच की पूर्ति करेंगे में, SpecFlow आदिम प्रकार (और कस्टम रूपांतरण के माध्यम से अन्य प्रकार के) के लिए रूपांतरण प्रदान करता है:

निम्नलिखित करने के लिए अपने कदम तरीकों को बदलें वाक्य के शेष को अनदेखा करता है। इसका मतलब यह संदिग्ध नहीं है क्योंकि यह double के बाद अंतिम string पैरामीटर का पता लगाता है (जैसा कि यह तय करने में सक्षम नहीं है कि वाक्य का एक हिस्सा स्ट्रिंग तर्क से मेल खाता है या इसमें अधिक तर्क हैं)।

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